Port https://codereview.chromium.org/398163006 to gn.
[pdfium.git] / core / include / fpdfdoc / fpdf_doc.h
index 18dc7aa..770133b 100644 (file)
@@ -8,7 +8,9 @@
 #define CORE_INCLUDE_FPDFDOC_FPDF_DOC_H_
 
 #include <map>
+#include <vector>
 
+#include "../../../third_party/base/nonstd_unique_ptr.h"
 #include "../fpdfapi/fpdf_parser.h"
 #include "../fpdfapi/fpdf_render.h"
 
@@ -31,8 +33,6 @@ class CPDF_FormNotify;
 class CPDF_IconFit;
 class CPDF_InterForm;
 class CPDF_Link;
-class CPDF_LinkList;
-class CPDF_LWinParam;
 class CPDF_Metadata;
 class CPDF_NumberTree;
 class CPDF_OCContext;
@@ -131,14 +131,13 @@ class CPDF_OCContext : public IPDF_OCContext {
   enum UsageType { View = 0, Design, Print, Export };
 
   CPDF_OCContext(CPDF_Document* pDoc, UsageType eUsageType = View);
-
-  virtual ~CPDF_OCContext();
+  ~CPDF_OCContext() override;
 
   CPDF_Document* GetDocument() const { return m_pDocument; }
 
   UsageType GetUsageType() const { return m_eUsageType; }
 
-  FX_BOOL CheckOCGVisible(const CPDF_Dictionary* pOCGDict);
+  FX_BOOL CheckOCGVisible(const CPDF_Dictionary* pOCGDict) override;
 
   void ResetOCContext();
 
@@ -163,24 +162,7 @@ class CPDF_OCContext : public IPDF_OCContext {
 
   std::map<const CPDF_Dictionary*, FX_BOOL> m_OCGStates;
 };
-class CPDF_LWinParam {
- public:
-  CPDF_LWinParam(CPDF_Dictionary* pDict) { m_pDict = pDict; }
-
-  operator CPDF_Dictionary*() const { return m_pDict; }
-
-  inline CFX_ByteString GetFileName() { return m_pDict->GetString("F"); }
-
-  inline CFX_ByteString GetDefaultDirectory() {
-    return m_pDict->GetString("D");
-  }
-
-  inline CFX_ByteString GetOperation() { return m_pDict->GetString("O"); }
-
-  inline CFX_ByteString GetParameter() { return m_pDict->GetString("P"); }
 
-  CPDF_Dictionary* m_pDict;
-};
 class CPDF_ActionFields {
  public:
   CPDF_ActionFields(const CPDF_Action* pAction) {
@@ -244,8 +226,6 @@ class CPDF_Action {
 
   FX_BOOL GetNewWindow() const { return m_pDict->GetBoolean("NewWindow"); }
 
-  CPDF_LWinParam GetWinParam() const;
-
   CFX_ByteString GetURI(CPDF_Document* pDoc) const;
 
   FX_BOOL GetMouseMap() const { return m_pDict->GetBoolean("IsMap"); }
@@ -357,29 +337,25 @@ class CPDF_FileSpec {
  protected:
   CPDF_Object* m_pObj;
 };
+
 class CPDF_LinkList {
  public:
-  CPDF_LinkList(CPDF_Document* pDoc) { m_pDocument = pDoc; }
-
+  CPDF_LinkList();
   ~CPDF_LinkList();
 
-  CPDF_Link GetLinkAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y);
-
-  int CountLinks(CPDF_Page* pPage);
-
-  CPDF_Link GetLink(CPDF_Page* pPage, int index);
-
-  CPDF_Document* GetDocument() const { return m_pDocument; }
+  CPDF_Link GetLinkAtPoint(CPDF_Page* pPage,
+                           FX_FLOAT pdf_x,
+                           FX_FLOAT pdf_y,
+                           int* z_order);
 
- protected:
-  CPDF_Document* m_pDocument;
-
-  CFX_MapPtrToPtr m_PageMap;
+ private:
+  const std::vector<CPDF_Dictionary*>* GetPageLinks(CPDF_Page* pPage);
 
-  CFX_PtrArray* GetPageLinks(CPDF_Page* pPage);
+  void LoadPageLinks(CPDF_Page* pPage, std::vector<CPDF_Dictionary*>* pList);
 
-  void LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList);
+  std::map<FX_DWORD, std::vector<CPDF_Dictionary*>> m_PageMap;
 };
+
 class CPDF_Link {
  public:
   CPDF_Link() : m_pDict(nullptr) {}
@@ -588,7 +564,6 @@ class CPDF_DefaultAppearance {
 class CPDF_InterForm : public CFX_PrivateData {
  public:
   CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bUpdateAP);
-
   ~CPDF_InterForm();
 
   static void EnableUpdateAP(FX_BOOL bUpdateAP);
@@ -643,29 +618,13 @@ class CPDF_InterForm : public CFX_PrivateData {
 
   CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const;
 
-  FX_DWORD CountControls(CFX_WideString csFieldName = L"");
-
-  CPDF_FormControl* GetControl(FX_DWORD index,
-                               CFX_WideString csFieldName = L"");
-
-  FX_BOOL IsValidFormControl(const void* pControl);
-
-  int CountPageControls(CPDF_Page* pPage) const;
-
-  CPDF_FormControl* GetPageControl(CPDF_Page* pPage, int index) const;
-
   CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage,
                                       FX_FLOAT pdf_x,
-                                      FX_FLOAT pdf_y) const;
+                                      FX_FLOAT pdf_y,
+                                      int* z_order) const;
 
   CPDF_FormControl* GetControlByDict(CPDF_Dictionary* pWidgetDict) const;
 
-  FX_DWORD CountInternalFields(const CFX_WideString& csFieldName = L"") const;
-
-  CPDF_Dictionary* GetInternalField(
-      FX_DWORD index,
-      const CFX_WideString& csFieldName = L"") const;
-
   CPDF_Document* GetDocument() const { return m_pDocument; }
 
   CPDF_Dictionary* GetFormDict() const { return m_pFormDict; }
@@ -739,14 +698,10 @@ class CPDF_InterForm : public CFX_PrivateData {
 
   FX_BOOL ResetForm(FX_BOOL bNotify = FALSE);
 
-  void ReloadForm();
-
   CPDF_FormNotify* GetFormNotify() const { return m_pFormNotify; }
 
   void SetFormNotify(const CPDF_FormNotify* pNotify);
 
-  int GetPageWithWidget(int iCurPage, FX_BOOL bNext);
-
   FX_BOOL IsUpdated() { return m_bUpdated; }
 
   void ClearUpdatedFlag() { m_bUpdated = FALSE; }
@@ -762,10 +717,10 @@ class CPDF_InterForm : public CFX_PrivateData {
 
   CPDF_Object* GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name);
 
-  CPDF_FormField* AddTerminalField(const CPDF_Dictionary* pFieldDict);
+  CPDF_FormField* AddTerminalField(CPDF_Dictionary* pFieldDict);
 
   CPDF_FormControl* AddControl(const CPDF_FormField* pField,
-                               const CPDF_Dictionary* pWidgetDict);
+                               CPDF_Dictionary* pWidgetDict);
 
   void FDF_ImportField(CPDF_Dictionary* pField,
                        const CFX_WideString& parent_name,
@@ -783,15 +738,15 @@ class CPDF_InterForm : public CFX_PrivateData {
   int CompareFieldName(const CFX_ByteString& name1,
                        const CFX_ByteString& name2);
 
-  CPDF_Document* m_pDocument;
+  CPDF_Document* const m_pDocument;
 
   FX_BOOL m_bGenerateAP;
 
   CPDF_Dictionary* m_pFormDict;
 
-  CFX_MapPtrToPtr m_ControlMap;
+  std::map<const CPDF_Dictionary*, CPDF_FormControl*> m_ControlMap;
 
-  CFieldTree* m_pFieldTree;
+  nonstd::unique_ptr<CFieldTree> m_pFieldTree;
 
   CFX_ByteString m_bsEncoding;
 
@@ -833,8 +788,6 @@ class CPDF_FormField {
 
   FX_DWORD GetFlags() { return m_Flags; }
 
-  CPDF_InterForm* GetInterForm() const { return m_pForm; }
-
   CPDF_Dictionary* GetFieldDict() const { return m_pDict; }
 
   void SetFieldDict(CPDF_Dictionary* pDict) { m_pDict = pDict; }
@@ -1001,7 +954,7 @@ class CPDF_FormControl {
 
   CPDF_Dictionary* GetWidget() const { return m_pWidgetDict; }
 
-  CFX_FloatRect GetRect();
+  CFX_FloatRect GetRect() const;
 
   void DrawControl(CFX_RenderDevice* pDevice,
                    CFX_AffineMatrix* pMatrix,
@@ -1151,23 +1104,18 @@ class CPDF_PageLabel {
  protected:
   CPDF_Document* m_pDocument;
 };
+
 class CPDF_Metadata {
  public:
-  CPDF_Metadata();
-
+  explicit CPDF_Metadata(CPDF_Document* pDoc);
   ~CPDF_Metadata();
 
-  void LoadDoc(CPDF_Document* pDoc);
-
-  int32_t GetString(const CFX_ByteStringC& bsItem, CFX_WideString& wsStr);
+  const CXML_Element* GetRoot() const;
 
-  CXML_Element* GetRoot() const;
-
-  CXML_Element* GetRDF() const;
-
- protected:
-  void* m_pData;
+ private:
+  nonstd::unique_ptr<CXML_Element> m_pXmlElement;
 };
+
 class CPDF_ViewerPreferences {
  public:
   CPDF_ViewerPreferences(CPDF_Document* pDoc);