Replace CPDF_Page::SetImageCache() with AddImageCache()

Now that the layering is fixed, the page can make its own cache. Note
that this method can not simply be combined with the constructor,
since not all pages will have caches.

Change-Id: I2ca3897f00e85ba740520747403dd58ae6ac6075
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/99952
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_page.cpp b/core/fpdfapi/page/cpdf_page.cpp
index 2579dcd..3c38364 100644
--- a/core/fpdfapi/page/cpdf_page.cpp
+++ b/core/fpdfapi/page/cpdf_page.cpp
@@ -196,8 +196,8 @@
   return GetDict()->GetArrayFor("Annots");
 }
 
-void CPDF_Page::SetPageImageCache(std::unique_ptr<CPDF_PageImageCache> pCache) {
-  m_pPageImageCache = std::move(pCache);
+void CPDF_Page::AddPageImageCache() {
+  m_pPageImageCache = std::make_unique<CPDF_PageImageCache>(this);
 }
 
 void CPDF_Page::SetRenderContext(std::unique_ptr<RenderContextIface> pContext) {
diff --git a/core/fpdfapi/page/cpdf_page.h b/core/fpdfapi/page/cpdf_page.h
index 19ed128..40357d4 100644
--- a/core/fpdfapi/page/cpdf_page.h
+++ b/core/fpdfapi/page/cpdf_page.h
@@ -79,12 +79,9 @@
   RetainPtr<CPDF_Array> GetMutableAnnotsArray();
   RetainPtr<const CPDF_Array> GetAnnotsArray() const;
 
+  void AddPageImageCache();
   CPDF_PageImageCache* GetPageImageCache() { return m_pPageImageCache.get(); }
-  void SetPageImageCache(std::unique_ptr<CPDF_PageImageCache> pCache);
-
-  RenderContextIface* GetRenderContext() const {
-    return m_pRenderContext.get();
-  }
+  RenderContextIface* GetRenderContext() { return m_pRenderContext.get(); }
 
   // `pContext` cannot be null. `SetRenderContext()` cannot be called if the
   // page already has a render context. Use `ClearRenderContext()` to reset the
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp
index bdb6a3c..f80652c 100644
--- a/fpdfsdk/fpdf_editpage.cpp
+++ b/fpdfsdk/fpdf_editpage.cpp
@@ -221,7 +221,7 @@
 #endif  // PDF_ENABLE_XFA
 
   auto pPage = pdfium::MakeRetain<CPDF_Page>(pDoc, pPageDict);
-  pPage->SetPageImageCache(std::make_unique<CPDF_PageImageCache>(pPage.Get()));
+  pPage->AddPageImageCache();
   pPage->ParseContent();
 
   return FPDFPageFromIPDFPage(pPage.Leak());  // Caller takes ownership.
diff --git a/fpdfsdk/fpdf_ppo.cpp b/fpdfsdk/fpdf_ppo.cpp
index a4f2365..86a0f39 100644
--- a/fpdfsdk/fpdf_ppo.cpp
+++ b/fpdfsdk/fpdf_ppo.cpp
@@ -564,8 +564,7 @@
         return false;
 
       auto pSrcPage = pdfium::MakeRetain<CPDF_Page>(src(), pSrcPageDict);
-      pSrcPage->SetPageImageCache(
-          std::make_unique<CPDF_PageImageCache>(pSrcPage.Get()));
+      pSrcPage->AddPageImageCache();
       NupPageSettings settings =
           nupState.CalculateNewPagePosition(pSrcPage->GetPageSize());
       bsContent += AddSubPage(pSrcPage, settings);
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 7c5050c..91522c3 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -407,7 +407,7 @@
     return nullptr;
 
   auto pPage = pdfium::MakeRetain<CPDF_Page>(pDoc, std::move(pDict));
-  pPage->SetPageImageCache(std::make_unique<CPDF_PageImageCache>(pPage.Get()));
+  pPage->AddPageImageCache();
   pPage->ParseContent();
 
   return FPDFPageFromIPDFPage(pPage.Leak());
@@ -957,7 +957,7 @@
     return false;
 
   auto page = pdfium::MakeRetain<CPDF_Page>(pDoc, std::move(pDict));
-  page->SetPageImageCache(std::make_unique<CPDF_PageImageCache>(page.Get()));
+  page->AddPageImageCache();
   size->width = page->GetPageWidth();
   size->height = page->GetPageHeight();
   return true;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
index 5523845..2d1a9ae 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
@@ -124,8 +124,7 @@
   DCHECK(pPageDict);
   m_pPDFPage =
       pdfium::MakeRetain<CPDF_Page>(GetDocument(), std::move(pPageDict));
-  m_pPDFPage->SetPageImageCache(
-      std::make_unique<CPDF_PageImageCache>(m_pPDFPage.Get()));
+  m_pPDFPage->AddPageImageCache();
   m_pPDFPage->ParseContent();
 }
 
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 9a5293f..0b944db 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -1247,7 +1247,7 @@
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
   auto page = pdfium::MakeRetain<CPDF_Page>(pDocument, std::move(pPageDict));
-  page->SetPageImageCache(std::make_unique<CPDF_PageImageCache>(page.Get()));
+  page->AddPageImageCache();
   page->ParseContent();
 
   int nWords = 0;
@@ -1303,7 +1303,7 @@
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
   auto page = pdfium::MakeRetain<CPDF_Page>(pDocument, std::move(pPageDict));
-  page->SetPageImageCache(std::make_unique<CPDF_PageImageCache>(page.Get()));
+  page->AddPageImageCache();
   page->ParseContent();
 
   int nWords = 0;