Fix nits in CPDF_Document.
- Make most of the protected section private.
- Remove unneeded headers and forward declarations.
Change-Id: I963171a67c94da86ffb2df2acb99e95592e132b2
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/67595
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index 9991e3a..467f8a5 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -6,11 +6,6 @@
#include "core/fpdfapi/parser/cpdf_document.h"
-#include <set>
-#include <utility>
-#include <vector>
-
-#include "build/build_config.h"
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_linearized_header.h"
@@ -19,9 +14,6 @@
#include "core/fpdfapi/parser/cpdf_parser.h"
#include "core/fpdfapi/parser/cpdf_read_validator.h"
#include "core/fpdfapi/parser/cpdf_reference.h"
-#include "core/fpdfapi/parser/cpdf_stream.h"
-#include "core/fpdfapi/parser/cpdf_stream_acc.h"
-#include "core/fpdfapi/parser/cpdf_string.h"
#include "core/fxcodec/jbig2/JBig2_DocumentContext.h"
#include "core/fxcrt/fx_codepage.h"
#include "third_party/base/ptr_util.h"
@@ -67,9 +59,7 @@
if (objnum == pNode->GetObjNum())
return *index;
- if (*skip_count)
- (*skip_count)--;
-
+ (*skip_count)--;
(*index)++;
return -1;
}
@@ -294,10 +284,9 @@
}
int CPDF_Document::GetPageIndex(uint32_t objnum) {
- uint32_t nPages = m_PageList.size();
uint32_t skip_count = 0;
bool bSkipped = false;
- for (uint32_t i = 0; i < nPages; i++) {
+ for (uint32_t i = 0; i < m_PageList.size(); ++i) {
if (m_PageList[i] == objnum)
return i;
@@ -473,6 +462,14 @@
m_PageList.erase(m_PageList.begin() + iPage);
}
+void CPDF_Document::SetRootForTesting(CPDF_Dictionary* root) {
+ m_pRootDict.Reset(root);
+}
+
+void CPDF_Document::ResizePageListForTesting(size_t size) {
+ m_PageList.resize(size);
+}
+
CPDF_Document::StockFontClearer::StockFontClearer(
CPDF_Document::PageDataIface* pPageData)
: m_pPageData(pPageData) {}
diff --git a/core/fpdfapi/parser/cpdf_document.h b/core/fpdfapi/parser/cpdf_document.h
index 26be5ea..abffb81 100644
--- a/core/fpdfapi/parser/cpdf_document.h
+++ b/core/fpdfapi/parser/cpdf_document.h
@@ -7,22 +7,16 @@
#ifndef CORE_FPDFAPI_PARSER_CPDF_DOCUMENT_H_
#define CORE_FPDFAPI_PARSER_CPDF_DOCUMENT_H_
-#include <functional>
#include <memory>
#include <set>
#include <utility>
#include <vector>
-#include "build/build_config.h"
-#include "core/fpdfapi/parser/cpdf_object.h"
#include "core/fpdfapi/parser/cpdf_parser.h"
#include "core/fxcrt/observed_ptr.h"
#include "core/fxcrt/retain_ptr.h"
#include "core/fxcrt/unowned_ptr.h"
-class CFX_Matrix;
-class CPDF_LinearizedHeader;
-class CPDF_Object;
class CPDF_ReadValidator;
class CPDF_StreamAcc;
class IFX_SeekableReadStream;
@@ -116,8 +110,9 @@
m_pLinksContext = std::move(pContext);
}
- // CPDF_Parser::ParsedObjectsHolder overrides:
+ // CPDF_Parser::ParsedObjectsHolder:
bool TryInit() override;
+ RetainPtr<CPDF_Object> ParseIndirectObject(uint32_t objnum) override;
CPDF_Parser::Error LoadDoc(
const RetainPtr<IFX_SeekableReadStream>& pFileAccess,
@@ -137,6 +132,12 @@
uint32_t GetParsedPageCountForTesting() { return m_ParsedPageCount; }
protected:
+ void SetParser(std::unique_ptr<CPDF_Parser> pParser);
+
+ void SetRootForTesting(CPDF_Dictionary* root);
+ void ResizePageListForTesting(size_t size);
+
+ private:
class StockFontClearer {
public:
explicit StockFontClearer(CPDF_Document::PageDataIface* pPageData);
@@ -150,9 +151,10 @@
int RetrievePageCount();
// When this method is called, m_pTreeTraversal[level] exists.
CPDF_Dictionary* TraversePDFPages(int iPage, int* nPagesToGo, size_t level);
- RetainPtr<CPDF_Object> ParseIndirectObject(uint32_t objnum) override;
+
const CPDF_Dictionary* GetPagesDict() const;
CPDF_Dictionary* GetPagesDict();
+
bool InsertDeletePDFPage(CPDF_Dictionary* pPages,
int nPagesToGo,
CPDF_Dictionary* pPageDict,
@@ -160,7 +162,6 @@
std::set<CPDF_Dictionary*>* pVisited);
bool InsertNewPage(int iPage, CPDF_Dictionary* pPageDict);
void ResetTraversal();
- void SetParser(std::unique_ptr<CPDF_Parser> pParser);
CPDF_Parser::Error HandleLoadResult(CPDF_Parser::Error error);
std::unique_ptr<CPDF_Parser> m_pParser;
diff --git a/core/fpdfapi/parser/cpdf_document_unittest.cpp b/core/fpdfapi/parser/cpdf_document_unittest.cpp
index 1c52e51..c49a77a 100644
--- a/core/fpdfapi/parser/cpdf_document_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_document_unittest.cpp
@@ -90,15 +90,14 @@
CPDF_Dictionary* pagesDict =
CreatePageTreeNode(std::move(allPages), this, kNumTestPages);
- m_pRootDict.Reset(NewIndirect<CPDF_Dictionary>());
- m_pRootDict->SetNewFor<CPDF_Reference>("Pages", this,
- pagesDict->GetObjNum());
- m_PageList.resize(kNumTestPages);
+ SetRootForTesting(NewIndirect<CPDF_Dictionary>());
+ GetRoot()->SetNewFor<CPDF_Reference>("Pages", this, pagesDict->GetObjNum());
+ ResizePageListForTesting(kNumTestPages);
}
void SetTreeSize(int size) {
- m_pRootDict->SetNewFor<CPDF_Number>("Count", size);
- m_PageList.resize(size);
+ GetRoot()->SetNewFor<CPDF_Number>("Count", size);
+ ResizePageListForTesting(size);
}
};
@@ -117,10 +116,9 @@
inlined_page_ = allPages->Add(CreateNumberedPage(2));
CPDF_Dictionary* pagesDict =
CreatePageTreeNode(std::move(allPages), this, 3);
- m_pRootDict.Reset(NewIndirect<CPDF_Dictionary>());
- m_pRootDict->SetNewFor<CPDF_Reference>("Pages", this,
- pagesDict->GetObjNum());
- m_PageList.resize(3);
+ SetRootForTesting(NewIndirect<CPDF_Dictionary>());
+ GetRoot()->SetNewFor<CPDF_Reference>("Pages", this, pagesDict->GetObjNum());
+ ResizePageListForTesting(3);
}
const CPDF_Object* inlined_page() const { return inlined_page_; }
@@ -143,10 +141,9 @@
CPDF_Dictionary* pagesDict = NewIndirect<CPDF_Dictionary>();
pagesDict->SetNewFor<CPDF_Name>("Type", "Pages");
pagesDict->SetNewFor<CPDF_Number>("Count", 3);
- m_PageList.resize(10);
- m_pRootDict.Reset(NewIndirect<CPDF_Dictionary>());
- m_pRootDict->SetNewFor<CPDF_Reference>("Pages", this,
- pagesDict->GetObjNum());
+ ResizePageListForTesting(10);
+ SetRootForTesting(NewIndirect<CPDF_Dictionary>());
+ GetRoot()->SetNewFor<CPDF_Reference>("Pages", this, pagesDict->GetObjNum());
}
};
diff --git a/fpdfsdk/fpdf_catalog_unittest.cpp b/fpdfsdk/fpdf_catalog_unittest.cpp
index 68655da..1ae35b2 100644
--- a/fpdfsdk/fpdf_catalog_unittest.cpp
+++ b/fpdfsdk/fpdf_catalog_unittest.cpp
@@ -25,7 +25,7 @@
: CPDF_Document(pdfium::MakeUnique<CPDF_DocRenderData>(),
pdfium::MakeUnique<CPDF_DocPageData>()) {}
- void SetRoot(CPDF_Dictionary* root) { m_pRootDict.Reset(root); }
+ void SetRoot(CPDF_Dictionary* root) { SetRootForTesting(root); }
};
class PDFCatalogTest : public testing::Test {
diff --git a/fpdfsdk/fpdf_doc_unittest.cpp b/fpdfsdk/fpdf_doc_unittest.cpp
index 2beadd4..1c673df 100644
--- a/fpdfsdk/fpdf_doc_unittest.cpp
+++ b/fpdfsdk/fpdf_doc_unittest.cpp
@@ -32,7 +32,7 @@
: CPDF_Document(pdfium::MakeUnique<CPDF_DocRenderData>(),
pdfium::MakeUnique<CPDF_DocPageData>()) {}
- void SetRoot(CPDF_Dictionary* root) { m_pRootDict.Reset(root); }
+ void SetRoot(CPDF_Dictionary* root) { SetRootForTesting(root); }
CPDF_IndirectObjectHolder* GetHolder() { return this; }
};