Remove const from public fpdfview types.

They contain (or are aliases for) parser objects, which are now
refcounted, and order to manipulate the internal refcounts, non-const
objects must be used. This avoids a number of const casts throughout
the codebase. Regrettably, there is some loss of const as a result.

This CL must happen first before we can use RetainPtr in a
number of these classes.

Change-Id: I0e894b56373ad35c68daf4499255be582699378d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/57853
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfdoc/cpdf_aaction.cpp b/core/fpdfdoc/cpdf_aaction.cpp
index 8284913..905be7c 100644
--- a/core/fpdfdoc/cpdf_aaction.cpp
+++ b/core/fpdfdoc/cpdf_aaction.cpp
@@ -41,7 +41,7 @@
 
 }  // namespace
 
-CPDF_AAction::CPDF_AAction(const CPDF_Dictionary* pDict) : m_pDict(pDict) {}
+CPDF_AAction::CPDF_AAction(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
 
 CPDF_AAction::CPDF_AAction(const CPDF_AAction& that) = default;
 
diff --git a/core/fpdfdoc/cpdf_aaction.h b/core/fpdfdoc/cpdf_aaction.h
index edd3539..699d913 100644
--- a/core/fpdfdoc/cpdf_aaction.h
+++ b/core/fpdfdoc/cpdf_aaction.h
@@ -39,7 +39,7 @@
     kNumberOfActions  // Must be last.
   };
 
-  explicit CPDF_AAction(const CPDF_Dictionary* pDict);
+  explicit CPDF_AAction(CPDF_Dictionary* pDict);
   CPDF_AAction(const CPDF_AAction& that);
   ~CPDF_AAction();
 
@@ -50,7 +50,7 @@
   static bool IsUserClick(AActionType eType);
 
  private:
-  UnownedPtr<const CPDF_Dictionary> const m_pDict;
+  UnownedPtr<CPDF_Dictionary> const m_pDict;
 };
 
 #endif  // CORE_FPDFDOC_CPDF_AACTION_H_
diff --git a/core/fpdfdoc/cpdf_action.cpp b/core/fpdfdoc/cpdf_action.cpp
index 18e4927..dc4f485 100644
--- a/core/fpdfdoc/cpdf_action.cpp
+++ b/core/fpdfdoc/cpdf_action.cpp
@@ -23,7 +23,7 @@
 
 }  // namespace
 
-CPDF_Action::CPDF_Action(const CPDF_Dictionary* pDict) : m_pDict(pDict) {}
+CPDF_Action::CPDF_Action(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
 
 CPDF_Action::CPDF_Action(const CPDF_Action& that) = default;
 
@@ -49,14 +49,14 @@
   if (type != GoTo && type != GoToR)
     return CPDF_Dest();
 
-  const CPDF_Object* pDest = m_pDict->GetDirectObjectFor("D");
+  CPDF_Object* pDest = m_pDict->GetDirectObjectFor("D");
   if (!pDest)
     return CPDF_Dest();
   if (pDest->IsString() || pDest->IsName()) {
     CPDF_NameTree name_tree(pDoc, "Dests");
     return CPDF_Dest(name_tree.LookupNamedDest(pDoc, pDest->GetUnicodeText()));
   }
-  if (const CPDF_Array* pArray = pDest->AsArray())
+  if (CPDF_Array* pArray = pDest->AsArray())
     return CPDF_Dest(pArray);
 
   return CPDF_Dest();
@@ -141,10 +141,10 @@
   if (!m_pDict || !m_pDict->KeyExist("Next"))
     return CPDF_Action(nullptr);
 
-  const CPDF_Object* pNext = m_pDict->GetDirectObjectFor("Next");
-  if (const CPDF_Array* pArray = ToArray(pNext))
+  CPDF_Object* pNext = m_pDict->GetDirectObjectFor("Next");
+  if (CPDF_Array* pArray = ToArray(pNext))
     return CPDF_Action(pArray->GetDictAt(iIndex));
-  if (const CPDF_Dictionary* pDict = ToDictionary(pNext)) {
+  if (CPDF_Dictionary* pDict = ToDictionary(pNext)) {
     if (iIndex == 0)
       return CPDF_Action(pDict);
   }
diff --git a/core/fpdfdoc/cpdf_action.h b/core/fpdfdoc/cpdf_action.h
index f0f8679..6ea1c63 100644
--- a/core/fpdfdoc/cpdf_action.h
+++ b/core/fpdfdoc/cpdf_action.h
@@ -37,11 +37,13 @@
     GoTo3DView
   };
 
-  explicit CPDF_Action(const CPDF_Dictionary* pDict);
+  explicit CPDF_Action(CPDF_Dictionary* pDict);
   CPDF_Action(const CPDF_Action& that);
   ~CPDF_Action();
 
+  CPDF_Dictionary* GetDict() { return m_pDict.Get(); }
   const CPDF_Dictionary* GetDict() const { return m_pDict.Get(); }
+
   ActionType GetType() const;
   CPDF_Dest GetDest(CPDF_Document* pDoc) const;
   WideString GetFilePath() const;
@@ -54,7 +56,7 @@
   CPDF_Action GetSubAction(size_t iIndex) const;
 
  private:
-  UnownedPtr<const CPDF_Dictionary> const m_pDict;
+  UnownedPtr<CPDF_Dictionary> const m_pDict;
 };
 
 #endif  // CORE_FPDFDOC_CPDF_ACTION_H_
diff --git a/core/fpdfdoc/cpdf_bookmark.cpp b/core/fpdfdoc/cpdf_bookmark.cpp
index 7f7958b..3a414ff 100644
--- a/core/fpdfdoc/cpdf_bookmark.cpp
+++ b/core/fpdfdoc/cpdf_bookmark.cpp
@@ -19,7 +19,7 @@
 
 CPDF_Bookmark::CPDF_Bookmark(const CPDF_Bookmark& that) = default;
 
-CPDF_Bookmark::CPDF_Bookmark(const CPDF_Dictionary* pDict) : m_pDict(pDict) {}
+CPDF_Bookmark::CPDF_Bookmark(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
 
 CPDF_Bookmark::~CPDF_Bookmark() = default;
 
@@ -52,7 +52,7 @@
   if (!m_pDict)
     return CPDF_Dest();
 
-  const CPDF_Object* pDest = m_pDict->GetDirectObjectFor("Dest");
+  CPDF_Object* pDest = m_pDict->GetDirectObjectFor("Dest");
   if (!pDest)
     return CPDF_Dest();
   if (pDest->IsString() || pDest->IsName()) {
@@ -60,7 +60,7 @@
     return CPDF_Dest(
         name_tree.LookupNamedDest(pDocument, pDest->GetUnicodeText()));
   }
-  if (const CPDF_Array* pArray = pDest->AsArray())
+  if (CPDF_Array* pArray = pDest->AsArray())
     return CPDF_Dest(pArray);
   return CPDF_Dest();
 }
diff --git a/core/fpdfdoc/cpdf_bookmark.h b/core/fpdfdoc/cpdf_bookmark.h
index 47fd071..1081867 100644
--- a/core/fpdfdoc/cpdf_bookmark.h
+++ b/core/fpdfdoc/cpdf_bookmark.h
@@ -19,17 +19,19 @@
  public:
   CPDF_Bookmark();
   CPDF_Bookmark(const CPDF_Bookmark& that);
-  explicit CPDF_Bookmark(const CPDF_Dictionary* pDict);
+  explicit CPDF_Bookmark(CPDF_Dictionary* pDict);
   ~CPDF_Bookmark();
 
+  CPDF_Dictionary* GetDict() { return m_pDict.Get(); }
   const CPDF_Dictionary* GetDict() const { return m_pDict.Get(); }
+
   uint32_t GetFontStyle() const;
   WideString GetTitle() const;
   CPDF_Dest GetDest(CPDF_Document* pDocument) const;
   CPDF_Action GetAction() const;
 
  private:
-  UnownedPtr<const CPDF_Dictionary> m_pDict;
+  UnownedPtr<CPDF_Dictionary> m_pDict;
 };
 
 #endif  // CORE_FPDFDOC_CPDF_BOOKMARK_H_
diff --git a/core/fpdfdoc/cpdf_bookmarktree.cpp b/core/fpdfdoc/cpdf_bookmarktree.cpp
index fc72db9..ce7cfef 100644
--- a/core/fpdfdoc/cpdf_bookmarktree.cpp
+++ b/core/fpdfdoc/cpdf_bookmarktree.cpp
@@ -13,27 +13,25 @@
 
 CPDF_BookmarkTree::~CPDF_BookmarkTree() = default;
 
-CPDF_Bookmark CPDF_BookmarkTree::GetFirstChild(
-    const CPDF_Bookmark& parent) const {
-  const CPDF_Dictionary* pParentDict = parent.GetDict();
+CPDF_Bookmark CPDF_BookmarkTree::GetFirstChild(CPDF_Bookmark* parent) const {
+  CPDF_Dictionary* pParentDict = parent->GetDict();
   if (pParentDict)
     return CPDF_Bookmark(pParentDict->GetDictFor("First"));
 
-  const CPDF_Dictionary* pRoot = m_pDocument->GetRoot();
+  CPDF_Dictionary* pRoot = m_pDocument->GetRoot();
   if (!pRoot)
     return CPDF_Bookmark();
 
-  const CPDF_Dictionary* pOutlines = pRoot->GetDictFor("Outlines");
+  CPDF_Dictionary* pOutlines = pRoot->GetDictFor("Outlines");
   return pOutlines ? CPDF_Bookmark(pOutlines->GetDictFor("First"))
                    : CPDF_Bookmark();
 }
 
-CPDF_Bookmark CPDF_BookmarkTree::GetNextSibling(
-    const CPDF_Bookmark& bookmark) const {
-  const CPDF_Dictionary* pDict = bookmark.GetDict();
+CPDF_Bookmark CPDF_BookmarkTree::GetNextSibling(CPDF_Bookmark* bookmark) const {
+  CPDF_Dictionary* pDict = bookmark->GetDict();
   if (!pDict)
     return CPDF_Bookmark();
 
-  const CPDF_Dictionary* pNext = pDict->GetDictFor("Next");
+  CPDF_Dictionary* pNext = pDict->GetDictFor("Next");
   return pNext == pDict ? CPDF_Bookmark() : CPDF_Bookmark(pNext);
 }
diff --git a/core/fpdfdoc/cpdf_bookmarktree.h b/core/fpdfdoc/cpdf_bookmarktree.h
index 3729dfc..b374bfa 100644
--- a/core/fpdfdoc/cpdf_bookmarktree.h
+++ b/core/fpdfdoc/cpdf_bookmarktree.h
@@ -17,8 +17,8 @@
   explicit CPDF_BookmarkTree(CPDF_Document* pDoc);
   ~CPDF_BookmarkTree();
 
-  CPDF_Bookmark GetFirstChild(const CPDF_Bookmark& parent) const;
-  CPDF_Bookmark GetNextSibling(const CPDF_Bookmark& bookmark) const;
+  CPDF_Bookmark GetFirstChild(CPDF_Bookmark* parent) const;
+  CPDF_Bookmark GetNextSibling(CPDF_Bookmark* bookmark) const;
   CPDF_Document* GetDocument() const { return m_pDocument.Get(); }
 
  private:
diff --git a/core/fpdfdoc/cpdf_dest.cpp b/core/fpdfdoc/cpdf_dest.cpp
index 1a373b6..511081f 100644
--- a/core/fpdfdoc/cpdf_dest.cpp
+++ b/core/fpdfdoc/cpdf_dest.cpp
@@ -32,9 +32,9 @@
 
 CPDF_Dest::CPDF_Dest() {}
 
-CPDF_Dest::CPDF_Dest(const CPDF_Dest& that) = default;
+CPDF_Dest::CPDF_Dest(CPDF_Array* pArray) : m_pArray(pArray) {}
 
-CPDF_Dest::CPDF_Dest(const CPDF_Array* pArray) : m_pArray(pArray) {}
+CPDF_Dest::CPDF_Dest(const CPDF_Dest& that) = default;
 
 CPDF_Dest::~CPDF_Dest() {}
 
diff --git a/core/fpdfdoc/cpdf_dest.h b/core/fpdfdoc/cpdf_dest.h
index e6e673e..4d9bfb8 100644
--- a/core/fpdfdoc/cpdf_dest.h
+++ b/core/fpdfdoc/cpdf_dest.h
@@ -17,11 +17,13 @@
 class CPDF_Dest {
  public:
   CPDF_Dest();
+  explicit CPDF_Dest(CPDF_Array* pArray);
   CPDF_Dest(const CPDF_Dest& that);
-  explicit CPDF_Dest(const CPDF_Array* pArray);
   ~CPDF_Dest();
 
+  CPDF_Array* GetArray() { return m_pArray.Get(); }
   const CPDF_Array* GetArray() const { return m_pArray.Get(); }
+
   ByteString GetRemoteName() const;
   int GetDestPageIndex(CPDF_Document* pDoc) const;
 
@@ -39,7 +41,7 @@
               float* pZoom) const;
 
  private:
-  UnownedPtr<const CPDF_Array> const m_pArray;
+  UnownedPtr<CPDF_Array> const m_pArray;
 };
 
 #endif  // CORE_FPDFDOC_CPDF_DEST_H_
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index 0322faf..b8d01f8 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -298,7 +298,7 @@
 }
 
 CPDF_AAction CPDF_FormField::GetAdditionalAction() const {
-  const CPDF_Object* pObj =
+  CPDF_Object* pObj =
       FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kAA);
   return CPDF_AAction(pObj ? pObj->GetDict() : nullptr);
 }
diff --git a/core/fpdfdoc/cpdf_viewerpreferences.cpp b/core/fpdfdoc/cpdf_viewerpreferences.cpp
index 0481d5c..9e63d37 100644
--- a/core/fpdfdoc/cpdf_viewerpreferences.cpp
+++ b/core/fpdfdoc/cpdf_viewerpreferences.cpp
@@ -30,8 +30,8 @@
   return pDict ? pDict->GetIntegerFor("NumCopies") : 1;
 }
 
-const CPDF_Array* CPDF_ViewerPreferences::PrintPageRange() const {
-  const CPDF_Dictionary* pDict = GetViewerPreferences();
+CPDF_Array* CPDF_ViewerPreferences::PrintPageRange() const {
+  CPDF_Dictionary* pDict = GetViewerPreferences();
   return pDict ? pDict->GetArrayFor("PrintPageRange") : nullptr;
 }
 
@@ -53,7 +53,7 @@
   return pName->GetString();
 }
 
-const CPDF_Dictionary* CPDF_ViewerPreferences::GetViewerPreferences() const {
-  const CPDF_Dictionary* pDict = m_pDoc->GetRoot();
+CPDF_Dictionary* CPDF_ViewerPreferences::GetViewerPreferences() const {
+  CPDF_Dictionary* pDict = m_pDoc->GetRoot();
   return pDict ? pDict->GetDictFor("ViewerPreferences") : nullptr;
 }
diff --git a/core/fpdfdoc/cpdf_viewerpreferences.h b/core/fpdfdoc/cpdf_viewerpreferences.h
index 45e4390..ff2b1c8 100644
--- a/core/fpdfdoc/cpdf_viewerpreferences.h
+++ b/core/fpdfdoc/cpdf_viewerpreferences.h
@@ -24,14 +24,14 @@
   bool IsDirectionR2L() const;
   bool PrintScaling() const;
   int32_t NumCopies() const;
-  const CPDF_Array* PrintPageRange() const;
+  CPDF_Array* PrintPageRange() const;
   ByteString Duplex() const;
 
   // Gets the entry for |bsKey|.
   Optional<ByteString> GenericName(const ByteString& bsKey) const;
 
  private:
-  const CPDF_Dictionary* GetViewerPreferences() const;
+  CPDF_Dictionary* GetViewerPreferences() const;
 
   UnownedPtr<const CPDF_Document> const m_pDoc;
 };
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index 94bd808..9a5e726 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -576,11 +576,11 @@
   if (!m_pCPDFDoc)
     return false;
 
-  const CPDF_Dictionary* pRoot = m_pCPDFDoc->GetRoot();
+  CPDF_Dictionary* pRoot = m_pCPDFDoc->GetRoot();
   if (!pRoot)
     return false;
 
-  const CPDF_Object* pOpenAction = pRoot->GetDictFor("OpenAction");
+  CPDF_Object* pOpenAction = pRoot->GetDictFor("OpenAction");
   if (!pOpenAction)
     pOpenAction = pRoot->GetArrayFor("OpenAction");
   if (!pOpenAction)
@@ -589,7 +589,7 @@
   if (pOpenAction->IsArray())
     return true;
 
-  const CPDF_Dictionary* pDict = pOpenAction->AsDictionary();
+  CPDF_Dictionary* pDict = pOpenAction->AsDictionary();
   if (!pDict)
     return false;
 
diff --git a/fpdfsdk/cpdfsdk_helpers.h b/fpdfsdk/cpdfsdk_helpers.h
index 97cebfd..5d9522a 100644
--- a/fpdfsdk/cpdfsdk_helpers.h
+++ b/fpdfsdk/cpdfsdk_helpers.h
@@ -32,7 +32,6 @@
 class CPDF_LinkExtract;
 class CPDF_PageObject;
 class CPDF_PageRenderContext;
-class CPDF_PathObject;
 class CPDF_Stream;
 class CPDF_StructElement;
 class CPDF_StructTree;
@@ -57,11 +56,11 @@
 CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc);
 
 // Conversions to/from incomplete FPDF_ API types.
-inline FPDF_ACTION FPDFActionFromCPDFDictionary(const CPDF_Dictionary* action) {
+inline FPDF_ACTION FPDFActionFromCPDFDictionary(CPDF_Dictionary* action) {
   return reinterpret_cast<FPDF_ACTION>(action);
 }
-inline const CPDF_Dictionary* CPDFDictionaryFromFPDFAction(FPDF_ACTION action) {
-  return reinterpret_cast<const CPDF_Dictionary*>(action);
+inline CPDF_Dictionary* CPDFDictionaryFromFPDFAction(FPDF_ACTION action) {
+  return reinterpret_cast<CPDF_Dictionary*>(action);
 }
 
 inline FPDF_ANNOTATION FPDFAnnotationFromCPDFAnnotContext(
@@ -87,13 +86,11 @@
   return reinterpret_cast<CFX_DIBitmap*>(bitmap);
 }
 
-inline FPDF_BOOKMARK FPDFBookmarkFromCPDFDictionary(
-    const CPDF_Dictionary* bookmark) {
+inline FPDF_BOOKMARK FPDFBookmarkFromCPDFDictionary(CPDF_Dictionary* bookmark) {
   return reinterpret_cast<FPDF_BOOKMARK>(bookmark);
 }
-inline const CPDF_Dictionary* CPDFDictionaryFromFPDFBookmark(
-    FPDF_BOOKMARK bookmark) {
-  return reinterpret_cast<const CPDF_Dictionary*>(bookmark);
+inline CPDF_Dictionary* CPDFDictionaryFromFPDFBookmark(FPDF_BOOKMARK bookmark) {
+  return reinterpret_cast<CPDF_Dictionary*>(bookmark);
 }
 
 inline FPDF_CLIPPATH FPDFClipPathFromCPDFClipPath(CPDF_ClipPath* path) {
@@ -103,11 +100,11 @@
   return reinterpret_cast<CPDF_ClipPath*>(path);
 }
 
-inline FPDF_DEST FPDFDestFromCPDFArray(const CPDF_Array* dest) {
+inline FPDF_DEST FPDFDestFromCPDFArray(CPDF_Array* dest) {
   return reinterpret_cast<FPDF_DEST>(dest);
 }
-inline const CPDF_Array* CPDFArrayFromFPDFDest(FPDF_DEST dest) {
-  return reinterpret_cast<const CPDF_Array*>(dest);
+inline CPDF_Array* CPDFArrayFromFPDFDest(FPDF_DEST dest) {
+  return reinterpret_cast<CPDF_Array*>(dest);
 }
 
 inline FPDF_FONT FPDFFontFromCPDFFont(CPDF_Font* font) {
@@ -149,11 +146,11 @@
   return reinterpret_cast<CPDF_ContentMarkItem*>(mark);
 }
 
-inline FPDF_PAGERANGE FPDFPageRangeFromCPDFArray(const CPDF_Array* range) {
+inline FPDF_PAGERANGE FPDFPageRangeFromCPDFArray(CPDF_Array* range) {
   return reinterpret_cast<FPDF_PAGERANGE>(range);
 }
-inline const CPDF_Array* CPDFArrayFromFPDFPageRange(FPDF_PAGERANGE range) {
-  return reinterpret_cast<const CPDF_Array*>(range);
+inline CPDF_Array* CPDFArrayFromFPDFPageRange(FPDF_PAGERANGE range) {
+  return reinterpret_cast<CPDF_Array*>(range);
 }
 
 inline FPDF_PATHSEGMENT FPDFPathSegmentFromFXPathPoint(
diff --git a/fpdfsdk/fpdf_doc.cpp b/fpdfsdk/fpdf_doc.cpp
index 6552b8a..b9bf93d 100644
--- a/fpdfsdk/fpdf_doc.cpp
+++ b/fpdfsdk/fpdf_doc.cpp
@@ -42,13 +42,13 @@
   }
 
   // Go into children items.
-  CPDF_Bookmark child = tree.GetFirstChild(bookmark);
+  CPDF_Bookmark child = tree.GetFirstChild(&bookmark);
   while (child.GetDict() && !pdfium::ContainsKey(*visited, child.GetDict())) {
     // Check this item and its children.
     CPDF_Bookmark found = FindBookmark(tree, child, title, visited);
     if (found.GetDict())
       return found;
-    child = tree.GetNextSibling(child);
+    child = tree.GetNextSibling(&child);
   }
   return CPDF_Bookmark();
 }
@@ -75,7 +75,7 @@
   CPDF_BookmarkTree tree(pDoc);
   CPDF_Bookmark cBookmark(CPDFDictionaryFromFPDFBookmark(bookmark));
   return FPDFBookmarkFromCPDFDictionary(
-      tree.GetFirstChild(cBookmark).GetDict());
+      tree.GetFirstChild(&cBookmark).GetDict());
 }
 
 FPDF_EXPORT FPDF_BOOKMARK FPDF_CALLCONV
@@ -90,7 +90,7 @@
   CPDF_BookmarkTree tree(pDoc);
   CPDF_Bookmark cBookmark(CPDFDictionaryFromFPDFBookmark(bookmark));
   return FPDFBookmarkFromCPDFDictionary(
-      tree.GetNextSibling(cBookmark).GetDict());
+      tree.GetNextSibling(&cBookmark).GetDict());
 }
 
 FPDF_EXPORT unsigned long FPDF_CALLCONV
diff --git a/fpdfsdk/fpdf_formfill.cpp b/fpdfsdk/fpdf_formfill.cpp
index 3a53dcd..5293f05 100644
--- a/fpdfsdk/fpdf_formfill.cpp
+++ b/fpdfsdk/fpdf_formfill.cpp
@@ -683,7 +683,7 @@
     return;
 
   CPDF_Document* pDoc = pFormFillEnv->GetPDFDocument();
-  const CPDF_Dictionary* pDict = pDoc->GetRoot();
+  CPDF_Dictionary* pDict = pDoc->GetRoot();
   if (!pDict)
     return;
 
diff --git a/public/fpdfview.h b/public/fpdfview.h
index f521259..6bbc2bf 100644
--- a/public/fpdfview.h
+++ b/public/fpdfview.h
@@ -34,14 +34,14 @@
 #define FPDF_OBJECT_NULLOBJ 8
 #define FPDF_OBJECT_REFERENCE 9
 
-// PDF types - use incomplete types for type safety.
-typedef const struct fpdf_action_t__* FPDF_ACTION;
+// PDF types - use incomplete types (never completed) just for API type safety.
+typedef struct fpdf_action_t__* FPDF_ACTION;
 typedef struct fpdf_annotation_t__* FPDF_ANNOTATION;
 typedef struct fpdf_attachment_t__* FPDF_ATTACHMENT;
 typedef struct fpdf_bitmap_t__* FPDF_BITMAP;
-typedef const struct fpdf_bookmark_t__* FPDF_BOOKMARK;
+typedef struct fpdf_bookmark_t__* FPDF_BOOKMARK;
 typedef struct fpdf_clippath_t__* FPDF_CLIPPATH;
-typedef const struct fpdf_dest_t__* FPDF_DEST;
+typedef struct fpdf_dest_t__* FPDF_DEST;
 typedef struct fpdf_document_t__* FPDF_DOCUMENT;
 typedef struct fpdf_font_t__* FPDF_FONT;
 typedef struct fpdf_form_handle_t__* FPDF_FORMHANDLE;
@@ -50,7 +50,7 @@
 typedef struct fpdf_pagelink_t__* FPDF_PAGELINK;
 typedef struct fpdf_pageobject_t__* FPDF_PAGEOBJECT;  // (text, path, etc.)
 typedef struct fpdf_pageobjectmark_t__* FPDF_PAGEOBJECTMARK;
-typedef const struct fpdf_pagerange_t__* FPDF_PAGERANGE;
+typedef struct fpdf_pagerange_t__* FPDF_PAGERANGE;
 typedef const struct fpdf_pathsegment_t* FPDF_PATHSEGMENT;
 typedef void* FPDF_RECORDER;  // Passed into skia.
 typedef struct fpdf_schhandle_t__* FPDF_SCHHANDLE;