Remove render-layer concepts from CPDF_PageRenderCache.

This is the first step in fixing some longstanding layering issues
that necessitate the use of a callback interface. This class can
eventually move to the page-layer.

Change-Id: I3055a799046a10747384b3080ce5a3340080142a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/99930
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_imageloader.cpp b/core/fpdfapi/render/cpdf_imageloader.cpp
index f1602eb..fe9babc 100644
--- a/core/fpdfapi/render/cpdf_imageloader.cpp
+++ b/core/fpdfapi/render/cpdf_imageloader.cpp
@@ -29,8 +29,10 @@
   m_pImageObject = pImage;
   bool ret;
   if (m_pCache) {
-    ret = m_pCache->StartGetCachedBitmap(m_pImageObject->GetImage(),
-                                         pRenderStatus, bStdCS);
+    ret = m_pCache->StartGetCachedBitmap(
+        m_pImageObject->GetImage(), pRenderStatus->GetFormResource(),
+        pRenderStatus->GetPageResource(), bStdCS,
+        pRenderStatus->GetGroupFamily(), pRenderStatus->GetLoadMask());
   } else {
     ret = m_pImageObject->GetImage()->StartLoadDIBBase(
         pRenderStatus->GetFormResource(), pRenderStatus->GetPageResource(),
@@ -41,9 +43,8 @@
   return ret;
 }
 
-bool CPDF_ImageLoader::Continue(PauseIndicatorIface* pPause,
-                                CPDF_RenderStatus* pRenderStatus) {
-  bool ret = m_pCache ? m_pCache->Continue(pPause, pRenderStatus)
+bool CPDF_ImageLoader::Continue(PauseIndicatorIface* pPause) {
+  bool ret = m_pCache ? m_pCache->Continue(pPause)
                       : m_pImageObject->GetImage()->Continue(pPause);
   if (!ret)
     HandleFailure();
diff --git a/core/fpdfapi/render/cpdf_imageloader.h b/core/fpdfapi/render/cpdf_imageloader.h
index d96ec33..87a27ef 100644
--- a/core/fpdfapi/render/cpdf_imageloader.h
+++ b/core/fpdfapi/render/cpdf_imageloader.h
@@ -25,7 +25,7 @@
   bool Start(const CPDF_ImageObject* pImage,
              const CPDF_RenderStatus* pRenderStatus,
              bool bStdCS);
-  bool Continue(PauseIndicatorIface* pPause, CPDF_RenderStatus* pRenderStatus);
+  bool Continue(PauseIndicatorIface* pPause);
 
   RetainPtr<CFX_DIBBase> TranslateImage(
       RetainPtr<CPDF_TransferFunc> pTransferFunc);
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index e77a513..4fe6c2b 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -552,7 +552,7 @@
 }
 
 bool CPDF_ImageRenderer::ContinueDefault(PauseIndicatorIface* pPause) {
-  if (m_Loader.Continue(pPause, m_pRenderStatus.Get()))
+  if (m_Loader.Continue(pPause))
     return true;
 
   if (!StartRenderDIBBase())
diff --git a/core/fpdfapi/render/cpdf_pagerendercache.cpp b/core/fpdfapi/render/cpdf_pagerendercache.cpp
index 98ad95d..665605f 100644
--- a/core/fpdfapi/render/cpdf_pagerendercache.cpp
+++ b/core/fpdfapi/render/cpdf_pagerendercache.cpp
@@ -16,8 +16,6 @@
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fpdfapi/parser/cpdf_stream.h"
-#include "core/fpdfapi/render/cpdf_rendercontext.h"
-#include "core/fpdfapi/render/cpdf_renderstatus.h"
 #include "core/fxcrt/stl_util.h"
 #include "core/fxge/dib/cfx_dibitmap.h"
 
@@ -80,8 +78,11 @@
 
 bool CPDF_PageRenderCache::StartGetCachedBitmap(
     RetainPtr<CPDF_Image> pImage,
-    const CPDF_RenderStatus* pRenderStatus,
-    bool bStdCS) {
+    const CPDF_Dictionary* pFormResources,
+    const CPDF_Dictionary* pPageResources,
+    bool bStdCS,
+    CPDF_ColorSpace::Family eFamily,
+    bool bLoadMask) {
   // A cross-document image may have come from the embedder.
   if (m_pPage->GetDocument() != pImage->GetDocument())
     return false;
@@ -96,7 +97,7 @@
         std::make_unique<ImageCacheEntry>(std::move(pImage));
   }
   CPDF_DIB::LoadState ret = m_pCurImageCacheEntry->StartGetCachedBitmap(
-      m_pPage->GetPageResources().Get(), pRenderStatus, bStdCS);
+      this, pFormResources, pPageResources, bStdCS, eFamily, bLoadMask);
   if (ret == CPDF_DIB::LoadState::kContinue)
     return true;
 
@@ -110,9 +111,8 @@
   return false;
 }
 
-bool CPDF_PageRenderCache::Continue(PauseIndicatorIface* pPause,
-                                    CPDF_RenderStatus* pRenderStatus) {
-  bool ret = m_pCurImageCacheEntry->Continue(pPause, pRenderStatus);
+bool CPDF_PageRenderCache::Continue(PauseIndicatorIface* pPause) {
+  bool ret = m_pCurImageCacheEntry->Continue(pPause, this);
   if (ret)
     return true;
 
@@ -169,9 +169,12 @@
 }
 
 CPDF_DIB::LoadState CPDF_PageRenderCache::ImageCacheEntry::StartGetCachedBitmap(
+    CPDF_PageRenderCache* pPageRenderCache,
+    const CPDF_Dictionary* pFormResources,
     const CPDF_Dictionary* pPageResources,
-    const CPDF_RenderStatus* pRenderStatus,
-    bool bStdCS) {
+    bool bStdCS,
+    CPDF_ColorSpace::Family eFamily,
+    bool bLoadMask) {
   if (m_pCachedBitmap) {
     m_pCurBitmap = m_pCachedBitmap;
     m_pCurMask = m_pCachedMask;
@@ -180,13 +183,12 @@
 
   m_pCurBitmap = m_pImage->CreateNewDIB();
   CPDF_DIB::LoadState ret = m_pCurBitmap.As<CPDF_DIB>()->StartLoadDIBBase(
-      true, pRenderStatus->GetFormResource(), pPageResources, bStdCS,
-      pRenderStatus->GetGroupFamily(), pRenderStatus->GetLoadMask());
+      true, pFormResources, pPageResources, bStdCS, eFamily, bLoadMask);
   if (ret == CPDF_DIB::LoadState::kContinue)
     return CPDF_DIB::LoadState::kContinue;
 
   if (ret == CPDF_DIB::LoadState::kSuccess)
-    ContinueGetCachedBitmap(pRenderStatus);
+    ContinueGetCachedBitmap(pPageRenderCache);
   else
     m_pCurBitmap.Reset();
   return CPDF_DIB::LoadState::kFail;
@@ -194,25 +196,23 @@
 
 bool CPDF_PageRenderCache::ImageCacheEntry::Continue(
     PauseIndicatorIface* pPause,
-    CPDF_RenderStatus* pRenderStatus) {
+    CPDF_PageRenderCache* pPageRenderCache) {
   CPDF_DIB::LoadState ret =
       m_pCurBitmap.As<CPDF_DIB>()->ContinueLoadDIBBase(pPause);
   if (ret == CPDF_DIB::LoadState::kContinue)
     return true;
 
   if (ret == CPDF_DIB::LoadState::kSuccess)
-    ContinueGetCachedBitmap(pRenderStatus);
+    ContinueGetCachedBitmap(pPageRenderCache);
   else
     m_pCurBitmap.Reset();
   return false;
 }
 
 void CPDF_PageRenderCache::ImageCacheEntry::ContinueGetCachedBitmap(
-    const CPDF_RenderStatus* pRenderStatus) {
+    CPDF_PageRenderCache* pPageRenderCache) {
   m_MatteColor = m_pCurBitmap.As<CPDF_DIB>()->GetMatteColor();
   m_pCurMask = m_pCurBitmap.As<CPDF_DIB>()->DetachMask();
-  CPDF_RenderContext* pContext = pRenderStatus->GetContext();
-  CPDF_PageRenderCache* pPageRenderCache = pContext->GetPageCache();
   m_dwTimeCount = pPageRenderCache->GetTimeCount();
   if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() < kHugeImageSize) {
     m_pCachedBitmap = m_pCurBitmap->Realize();
diff --git a/core/fpdfapi/render/cpdf_pagerendercache.h b/core/fpdfapi/render/cpdf_pagerendercache.h
index f9f6b5c..ce2040c 100644
--- a/core/fpdfapi/render/cpdf_pagerendercache.h
+++ b/core/fpdfapi/render/cpdf_pagerendercache.h
@@ -22,7 +22,6 @@
 class CPDF_Dictionary;
 class CPDF_Image;
 class CPDF_Page;
-class CPDF_RenderStatus;
 class CPDF_Stream;
 class PauseIndicatorIface;
 
@@ -39,10 +38,13 @@
   CPDF_Page* GetPage() const { return m_pPage.Get(); }
 
   bool StartGetCachedBitmap(RetainPtr<CPDF_Image> pImage,
-                            const CPDF_RenderStatus* pRenderStatus,
-                            bool bStdCS);
+                            const CPDF_Dictionary* pFormResources,
+                            const CPDF_Dictionary* pPageResources,
+                            bool bStdCS,
+                            CPDF_ColorSpace::Family eFamily,
+                            bool bLoadMask);
 
-  bool Continue(PauseIndicatorIface* pPause, CPDF_RenderStatus* pRenderStatus);
+  bool Continue(PauseIndicatorIface* pPause);
 
   uint32_t GetCurMatteColor() const;
   RetainPtr<CFX_DIBBase> DetachCurBitmap();
@@ -62,19 +64,22 @@
     CPDF_Image* GetImage() const { return m_pImage.Get(); }
 
     CPDF_DIB::LoadState StartGetCachedBitmap(
+        CPDF_PageRenderCache* pPageRenderCache,
+        const CPDF_Dictionary* pFormResources,
         const CPDF_Dictionary* pPageResources,
-        const CPDF_RenderStatus* pRenderStatus,
-        bool bStdCS);
+        bool bStdCS,
+        CPDF_ColorSpace::Family eFamily,
+        bool bLoadMask);
 
     // Returns whether to Continue() or not.
     bool Continue(PauseIndicatorIface* pPause,
-                  CPDF_RenderStatus* pRenderStatus);
+                  CPDF_PageRenderCache* pPageRenderCache);
 
     RetainPtr<CFX_DIBBase> DetachBitmap();
     RetainPtr<CFX_DIBBase> DetachMask();
 
    private:
-    void ContinueGetCachedBitmap(const CPDF_RenderStatus* pRenderStatus);
+    void ContinueGetCachedBitmap(CPDF_PageRenderCache* pPageRenderCache);
     void CalcSize();
 
     uint32_t m_dwTimeCount = 0;