Fix layering from fpdfapi/parser to fpdfapi/page and fpdfapi/render.

Almost. There is still a use of the page module in CPDF_Document
that has to move back up into the page layer.

This puts some more burden on CPDF_Document creators to supply
objects from other layers, but that is part of the price of
separation.

Note that test files, although occurring in the same directory as
the code they test, are part of a much higher-level unittests module
which can make use of things the "shipping" code can't. We add some
dependencies to these tests to cover this case.

Change-Id: I185183fcf79b344a78c54600ca021a6765565e82
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/55671
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/edit/BUILD.gn b/core/fpdfapi/edit/BUILD.gn
index 9f74832..5595f8f 100644
--- a/core/fpdfapi/edit/BUILD.gn
+++ b/core/fpdfapi/edit/BUILD.gn
@@ -39,6 +39,7 @@
     "../font",
     "../page",
     "../parser",
+    "../render",
   ]
   pdfium_root_dir = "../../../"
 }
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index af712af..4566e4a 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -21,6 +21,7 @@
 #include "core/fpdfapi/parser/cpdf_parser.h"
 #include "core/fpdfapi/parser/cpdf_reference.h"
 #include "core/fpdfapi/parser/cpdf_stream.h"
+#include "core/fpdfapi/render/cpdf_docrenderdata.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/base/ptr_util.h"
 
@@ -194,7 +195,10 @@
   pPathObj->m_GeneralState.SetFillAlpha(0.5f);
   pPathObj->m_GeneralState.SetStrokeAlpha(0.8f);
 
-  auto pDoc = pdfium::MakeUnique<CPDF_Document>();
+  auto pDoc = pdfium::MakeUnique<CPDF_Document>(
+      pdfium::MakeUnique<CPDF_DocRenderData>(),
+      pdfium::MakeUnique<CPDF_DocPageData>());
+
   pDoc->CreateNewDoc();
   CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(0);
   auto pTestPage = pdfium::MakeRetain<CPDF_Page>(pDoc.get(), pPageDict, false);
@@ -233,7 +237,10 @@
 
 TEST_F(CPDF_PageContentGeneratorTest, ProcessStandardText) {
   // Checking font whose font dictionary is not yet indirect object.
-  auto pDoc = pdfium::MakeUnique<CPDF_Document>();
+  auto pDoc = pdfium::MakeUnique<CPDF_Document>(
+      pdfium::MakeUnique<CPDF_DocRenderData>(),
+      pdfium::MakeUnique<CPDF_DocPageData>());
+
   pDoc->CreateNewDoc();
   CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(0);
   auto pTestPage = pdfium::MakeRetain<CPDF_Page>(pDoc.get(), pPageDict, false);
@@ -296,8 +303,11 @@
 
 TEST_F(CPDF_PageContentGeneratorTest, ProcessText) {
   // Checking font whose font dictionary is already an indirect object.
-  auto pDoc = pdfium::MakeUnique<CPDF_Document>();
+  auto pDoc = pdfium::MakeUnique<CPDF_Document>(
+      pdfium::MakeUnique<CPDF_DocRenderData>(),
+      pdfium::MakeUnique<CPDF_DocPageData>());
   pDoc->CreateNewDoc();
+
   CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(0);
   auto pTestPage = pdfium::MakeRetain<CPDF_Page>(pDoc.get(), pPageDict, false);
   CPDF_PageContentGenerator generator(pTestPage.Get());
@@ -358,7 +368,9 @@
 }
 
 TEST_F(CPDF_PageContentGeneratorTest, ProcessEmptyForm) {
-  auto pDoc = pdfium::MakeUnique<CPDF_Document>();
+  auto pDoc = pdfium::MakeUnique<CPDF_Document>(
+      pdfium::MakeUnique<CPDF_DocRenderData>(),
+      pdfium::MakeUnique<CPDF_DocPageData>());
   pDoc->CreateNewDoc();
   auto pDict = pdfium::MakeRetain<CPDF_Dictionary>();
   auto pStream = pdfium::MakeRetain<CPDF_Stream>(nullptr, 0, std::move(pDict));
@@ -378,7 +390,9 @@
 }
 
 TEST_F(CPDF_PageContentGeneratorTest, ProcessFormWithPath) {
-  auto pDoc = pdfium::MakeUnique<CPDF_Document>();
+  auto pDoc = pdfium::MakeUnique<CPDF_Document>(
+      pdfium::MakeUnique<CPDF_DocRenderData>(),
+      pdfium::MakeUnique<CPDF_DocPageData>());
   pDoc->CreateNewDoc();
   auto pDict = pdfium::MakeRetain<CPDF_Dictionary>();
   const char content[] =
diff --git a/core/fpdfapi/font/BUILD.gn b/core/fpdfapi/font/BUILD.gn
index f479ab2..a649460 100644
--- a/core/fpdfapi/font/BUILD.gn
+++ b/core/fpdfapi/font/BUILD.gn
@@ -63,7 +63,9 @@
   deps = [
     ":font",
     "../../fpdfapi",
+    "../page",
     "../parser",
+    "../render",
   ]
   pdfium_root_dir = "../../../"
 }
diff --git a/core/fpdfapi/font/cpdf_cidfont_unittest.cpp b/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
index fe10bc9..563ee30 100644
--- a/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
@@ -7,10 +7,12 @@
 #include <utility>
 
 #include "core/fpdfapi/cpdf_modulemgr.h"
+#include "core/fpdfapi/page/cpdf_docpagedata.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fpdfapi/parser/cpdf_name.h"
+#include "core/fpdfapi/render/cpdf_docrenderdata.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 class CPDF_CIDFontTest : public testing::Test {
@@ -20,7 +22,8 @@
 };
 
 TEST_F(CPDF_CIDFontTest, BUG_920636) {
-  CPDF_Document doc;
+  CPDF_Document doc(pdfium::MakeUnique<CPDF_DocRenderData>(),
+                    pdfium::MakeUnique<CPDF_DocPageData>());
   auto font_dict = pdfium::MakeRetain<CPDF_Dictionary>();
   font_dict->SetNewFor<CPDF_Name>("Encoding", "Identity−H");
 
diff --git a/core/fpdfapi/parser/BUILD.gn b/core/fpdfapi/parser/BUILD.gn
index af141a8..ffcf909 100644
--- a/core/fpdfapi/parser/BUILD.gn
+++ b/core/fpdfapi/parser/BUILD.gn
@@ -120,6 +120,8 @@
     ":parser",
     "../",
     "../../../constants",
+    "../page",
+    "../render",
   ]
   pdfium_root_dir = "../../../"
 
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index 0ddaefe..df759a7 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -1001,12 +1001,16 @@
 }
 
 std::pair<CPDF_Parser::Error, std::unique_ptr<CPDF_Document>>
-CPDF_DataAvail::ParseDocument(const char* password) {
+CPDF_DataAvail::ParseDocument(
+    std::unique_ptr<CPDF_Document::RenderDataIface> pRenderData,
+    std::unique_ptr<CPDF_Document::PageDataIface> pPageData,
+    const char* password) {
   if (m_pDocument) {
     // We already returned parsed document.
     return std::make_pair(CPDF_Parser::HANDLER_ERROR, nullptr);
   }
-  auto document = pdfium::MakeUnique<CPDF_Document>();
+  auto document = pdfium::MakeUnique<CPDF_Document>(std::move(pRenderData),
+                                                    std::move(pPageData));
   document->AddObserver(this);
 
   CPDF_ReadValidator::Session read_session(GetValidator());
diff --git a/core/fpdfapi/parser/cpdf_data_avail.h b/core/fpdfapi/parser/cpdf_data_avail.h
index baf2a90..60919c7 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.h
+++ b/core/fpdfapi/parser/cpdf_data_avail.h
@@ -108,6 +108,8 @@
   RetainPtr<CPDF_ReadValidator> GetValidator() const;
 
   std::pair<CPDF_Parser::Error, std::unique_ptr<CPDF_Document>> ParseDocument(
+      std::unique_ptr<CPDF_Document::RenderDataIface> pRenderData,
+      std::unique_ptr<CPDF_Document::PageDataIface> pPageData,
       const char* password);
 
   const CPDF_HintTables* GetHintTables() const { return m_pHintTables.get(); }
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index 3200884..8447a41 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -6,13 +6,11 @@
 
 #include "core/fpdfapi/parser/cpdf_document.h"
 
-#include <memory>
 #include <set>
 #include <utility>
 #include <vector>
 
 #include "build/build_config.h"
-#include "core/fpdfapi/page/cpdf_docpagedata.h"
 #include "core/fpdfapi/page/cpdf_pagemodule.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
@@ -25,7 +23,6 @@
 #include "core/fpdfapi/parser/cpdf_stream.h"
 #include "core/fpdfapi/parser/cpdf_stream_acc.h"
 #include "core/fpdfapi/parser/cpdf_string.h"
-#include "core/fpdfapi/render/cpdf_docrenderdata.h"
 #include "core/fxcodec/JBig2_DocumentContext.h"
 #include "core/fxcrt/fx_codepage.h"
 #include "core/fxge/fx_font.h"
@@ -65,9 +62,10 @@
 
 }  // namespace
 
-CPDF_Document::CPDF_Document()
-    : m_pDocRender(pdfium::MakeUnique<CPDF_DocRenderData>()),
-      m_pDocPage(pdfium::MakeUnique<CPDF_DocPageData>()),
+CPDF_Document::CPDF_Document(std::unique_ptr<RenderDataIface> pRenderData,
+                             std::unique_ptr<PageDataIface> pPageData)
+    : m_pDocRender(std::move(pRenderData)),
+      m_pDocPage(std::move(pPageData)),
       m_StockFontClearer(this) {
   m_pDocRender->SetDocument(this);
   m_pDocPage->SetDocument(this);
diff --git a/core/fpdfapi/parser/cpdf_document.h b/core/fpdfapi/parser/cpdf_document.h
index 3d9196c..4fadc4f 100644
--- a/core/fpdfapi/parser/cpdf_document.h
+++ b/core/fpdfapi/parser/cpdf_document.h
@@ -79,7 +79,8 @@
 
   static const int kPageMaxNum = 0xFFFFF;
 
-  CPDF_Document();
+  CPDF_Document(std::unique_ptr<RenderDataIface> pRenderData,
+                std::unique_ptr<PageDataIface> pPageData);
   ~CPDF_Document() override;
 
   Extension* GetExtension() const { return m_pExtension.get(); }
diff --git a/core/fpdfapi/parser/cpdf_document_unittest.cpp b/core/fpdfapi/parser/cpdf_document_unittest.cpp
index 682ac95..84a16c3 100644
--- a/core/fpdfapi/parser/cpdf_document_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_document_unittest.cpp
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "core/fpdfapi/cpdf_modulemgr.h"
+#include "core/fpdfapi/page/cpdf_docpagedata.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_boolean.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
@@ -17,6 +18,7 @@
 #include "core/fpdfapi/parser/cpdf_parser.h"
 #include "core/fpdfapi/parser/cpdf_reference.h"
 #include "core/fpdfapi/parser/cpdf_string.h"
+#include "core/fpdfapi/render/cpdf_docrenderdata.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/base/ptr_util.h"
 
@@ -48,7 +50,9 @@
 
 class CPDF_TestDocumentForPages final : public CPDF_Document {
  public:
-  CPDF_TestDocumentForPages() : CPDF_Document() {
+  CPDF_TestDocumentForPages()
+      : CPDF_Document(pdfium::MakeUnique<CPDF_DocRenderData>(),
+                      pdfium::MakeUnique<CPDF_DocPageData>()) {
     // Set up test
     auto zeroToTwo = pdfium::MakeRetain<CPDF_Array>();
     zeroToTwo->AddNew<CPDF_Reference>(
@@ -100,7 +104,9 @@
 
 class CPDF_TestDocumentWithPageWithoutPageNum final : public CPDF_Document {
  public:
-  CPDF_TestDocumentWithPageWithoutPageNum() : CPDF_Document() {
+  CPDF_TestDocumentWithPageWithoutPageNum()
+      : CPDF_Document(pdfium::MakeUnique<CPDF_DocRenderData>(),
+                      pdfium::MakeUnique<CPDF_DocPageData>()) {
     // Set up test
     auto allPages = pdfium::MakeRetain<CPDF_Array>();
     allPages->AddNew<CPDF_Reference>(
@@ -131,7 +137,9 @@
 
 class CPDF_TestDocPagesWithoutKids final : public CPDF_Document {
  public:
-  CPDF_TestDocPagesWithoutKids() : CPDF_Document() {
+  CPDF_TestDocPagesWithoutKids()
+      : CPDF_Document(pdfium::MakeUnique<CPDF_DocRenderData>(),
+                      pdfium::MakeUnique<CPDF_DocPageData>()) {
     CPDF_Dictionary* pagesDict = NewIndirect<CPDF_Dictionary>();
     pagesDict->SetNewFor<CPDF_Name>("Type", "Pages");
     pagesDict->SetNewFor<CPDF_Number>("Count", 3);
@@ -144,6 +152,10 @@
 
 class CPDF_TestDocumentAllowSetParser final : public CPDF_Document {
  public:
+  CPDF_TestDocumentAllowSetParser()
+      : CPDF_Document(pdfium::MakeUnique<CPDF_DocRenderData>(),
+                      pdfium::MakeUnique<CPDF_DocPageData>()) {}
+
   using CPDF_Document::SetParser;
 };
 
diff --git a/core/fpdfapi/render/BUILD.gn b/core/fpdfapi/render/BUILD.gn
index 4129b2f..601ec25 100644
--- a/core/fpdfapi/render/BUILD.gn
+++ b/core/fpdfapi/render/BUILD.gn
@@ -59,10 +59,7 @@
     "../page",
     "../parser",
   ]
-  allow_circular_includes_from = [
-    "../parser",
-    "../page",
-  ]
+  allow_circular_includes_from = [ "../page" ]
   visibility = [ "../../../*" ]
 }
 
diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn
index a3241e1..3e2b605 100644
--- a/fpdfsdk/BUILD.gn
+++ b/fpdfsdk/BUILD.gn
@@ -128,7 +128,9 @@
     ":fpdfsdk",
     "../:pdfium_public_headers",
     "../core/fpdfapi",
+    "../core/fpdfapi/page",
     "../core/fpdfapi/parser",
+    "../core/fpdfapi/render",
     "../core/fpdfdoc",
   ]
   pdfium_root_dir = "../"
diff --git a/fpdfsdk/fpdf_catalog_unittest.cpp b/fpdfsdk/fpdf_catalog_unittest.cpp
index ff3adcf..1b12506 100644
--- a/fpdfsdk/fpdf_catalog_unittest.cpp
+++ b/fpdfsdk/fpdf_catalog_unittest.cpp
@@ -7,11 +7,13 @@
 #include <memory>
 
 #include "core/fpdfapi/cpdf_modulemgr.h"
+#include "core/fpdfapi/page/cpdf_docpagedata.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fpdfapi/parser/cpdf_number.h"
 #include "core/fpdfapi/parser/cpdf_parser.h"
 #include "core/fpdfapi/parser/cpdf_string.h"
+#include "core/fpdfapi/render/cpdf_docrenderdata.h"
 #include "fpdfsdk/cpdfsdk_helpers.h"
 #include "public/cpp/fpdf_scopers.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -19,7 +21,9 @@
 
 class CPDF_TestDocument final : public CPDF_Document {
  public:
-  CPDF_TestDocument() : CPDF_Document() {}
+  CPDF_TestDocument()
+      : CPDF_Document(pdfium::MakeUnique<CPDF_DocRenderData>(),
+                      pdfium::MakeUnique<CPDF_DocPageData>()) {}
 
   void SetRoot(CPDF_Dictionary* root) { m_pRootDict.Reset(root); }
 };
diff --git a/fpdfsdk/fpdf_dataavail.cpp b/fpdfsdk/fpdf_dataavail.cpp
index efcd624..aa3968f 100644
--- a/fpdfsdk/fpdf_dataavail.cpp
+++ b/fpdfsdk/fpdf_dataavail.cpp
@@ -9,8 +9,10 @@
 #include <memory>
 #include <utility>
 
+#include "core/fpdfapi/page/cpdf_docpagedata.h"
 #include "core/fpdfapi/parser/cpdf_data_avail.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
+#include "core/fpdfapi/render/cpdf_docrenderdata.h"
 #include "core/fxcrt/fx_safe_types.h"
 #include "core/fxcrt/fx_stream.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -161,7 +163,9 @@
     return nullptr;
   CPDF_Parser::Error error;
   std::unique_ptr<CPDF_Document> document;
-  std::tie(error, document) = pDataAvail->m_pDataAvail->ParseDocument(password);
+  std::tie(error, document) = pDataAvail->m_pDataAvail->ParseDocument(
+      pdfium::MakeUnique<CPDF_DocRenderData>(),
+      pdfium::MakeUnique<CPDF_DocPageData>(), password);
   if (error != CPDF_Parser::SUCCESS) {
     ProcessParseError(error);
     return nullptr;
diff --git a/fpdfsdk/fpdf_doc_unittest.cpp b/fpdfsdk/fpdf_doc_unittest.cpp
index 08517d7..032f95f 100644
--- a/fpdfsdk/fpdf_doc_unittest.cpp
+++ b/fpdfsdk/fpdf_doc_unittest.cpp
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "core/fpdfapi/cpdf_modulemgr.h"
+#include "core/fpdfapi/page/cpdf_docpagedata.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
@@ -17,6 +18,7 @@
 #include "core/fpdfapi/parser/cpdf_parser.h"
 #include "core/fpdfapi/parser/cpdf_reference.h"
 #include "core/fpdfapi/parser/cpdf_string.h"
+#include "core/fpdfapi/render/cpdf_docrenderdata.h"
 #include "core/fpdfdoc/cpdf_dest.h"
 #include "fpdfsdk/cpdfsdk_helpers.h"
 #include "public/cpp/fpdf_scopers.h"
@@ -26,7 +28,9 @@
 
 class CPDF_TestDocument final : public CPDF_Document {
  public:
-  CPDF_TestDocument() : CPDF_Document() {}
+  CPDF_TestDocument()
+      : CPDF_Document(pdfium::MakeUnique<CPDF_DocRenderData>(),
+                      pdfium::MakeUnique<CPDF_DocPageData>()) {}
 
   void SetRoot(CPDF_Dictionary* root) { m_pRootDict.Reset(root); }
   CPDF_IndirectObjectHolder* GetHolder() { return this; }
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp
index d7a429b..47ce64d 100644
--- a/fpdfsdk/fpdf_editpage.cpp
+++ b/fpdfsdk/fpdf_editpage.cpp
@@ -14,6 +14,7 @@
 #include "constants/page_object.h"
 #include "core/fpdfapi/edit/cpdf_pagecontentgenerator.h"
 #include "core/fpdfapi/page/cpdf_colorspace.h"
+#include "core/fpdfapi/page/cpdf_docpagedata.h"
 #include "core/fpdfapi/page/cpdf_form.h"
 #include "core/fpdfapi/page/cpdf_formobject.h"
 #include "core/fpdfapi/page/cpdf_imageobject.h"
@@ -26,6 +27,7 @@
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fpdfapi/parser/cpdf_number.h"
 #include "core/fpdfapi/parser/cpdf_string.h"
+#include "core/fpdfapi/render/cpdf_docrenderdata.h"
 #include "core/fpdfdoc/cpdf_annot.h"
 #include "core/fpdfdoc/cpdf_annotlist.h"
 #include "core/fxcrt/fx_extension.h"
@@ -151,7 +153,9 @@
 }  // namespace
 
 FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV FPDF_CreateNewDocument() {
-  auto pDoc = pdfium::MakeUnique<CPDF_Document>();
+  auto pDoc = pdfium::MakeUnique<CPDF_Document>(
+      pdfium::MakeUnique<CPDF_DocRenderData>(),
+      pdfium::MakeUnique<CPDF_DocPageData>());
   pDoc->CreateNewDoc();
 
   time_t currentTime;
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 4819fe0..97b4392 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -12,6 +12,7 @@
 
 #include "build/build_config.h"
 #include "core/fpdfapi/cpdf_modulemgr.h"
+#include "core/fpdfapi/page/cpdf_docpagedata.h"
 #include "core/fpdfapi/page/cpdf_page.h"
 #include "core/fpdfapi/page/cpdf_pagerendercontext.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
@@ -20,6 +21,7 @@
 #include "core/fpdfapi/parser/cpdf_name.h"
 #include "core/fpdfapi/parser/cpdf_parser.h"
 #include "core/fpdfapi/parser/fpdf_parser_decode.h"
+#include "core/fpdfapi/render/cpdf_docrenderdata.h"
 #include "core/fpdfapi/render/cpdf_occontext.h"
 #include "core/fpdfapi/render/cpdf_progressiverenderer.h"
 #include "core/fpdfapi/render/cpdf_rendercontext.h"
@@ -145,7 +147,10 @@
     return nullptr;
   }
 
-  auto pDocument = pdfium::MakeUnique<CPDF_Document>();
+  auto pDocument = pdfium::MakeUnique<CPDF_Document>(
+      pdfium::MakeUnique<CPDF_DocRenderData>(),
+      pdfium::MakeUnique<CPDF_DocPageData>());
+
   CPDF_Parser::Error error = pDocument->LoadDoc(pFileAccess, password);
   if (error != CPDF_Parser::SUCCESS) {
     ProcessParseError(error);