Add proper const/non-const versions of CPDF_Dictionary::GetStreamFor().

BUG=pdfium:234

Change-Id: Ia3e758bbe5c445c3856f5215e900e02a16b4d7d7
Reviewed-on: https://pdfium-review.googlesource.com/32910
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: dsinclair <dsinclair@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp
index 2201e39..35fed75 100644
--- a/core/fpdfapi/font/cpdf_font.cpp
+++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -277,7 +277,7 @@
 
 void CPDF_Font::LoadUnicodeMap() const {
   m_bToUnicodeLoaded = true;
-  CPDF_Stream* pStream = m_pFontDict->GetStreamFor("ToUnicode");
+  const CPDF_Stream* pStream = m_pFontDict->GetStreamFor("ToUnicode");
   if (!pStream)
     return;
 
diff --git a/core/fpdfapi/font/cpdf_tounicodemap.cpp b/core/fpdfapi/font/cpdf_tounicodemap.cpp
index f21c4a3..7b5936c 100644
--- a/core/fpdfapi/font/cpdf_tounicodemap.cpp
+++ b/core/fpdfapi/font/cpdf_tounicodemap.cpp
@@ -122,7 +122,7 @@
   return uni.ValueOrDefault(0);
 }
 
-void CPDF_ToUnicodeMap::Load(CPDF_Stream* pStream) {
+void CPDF_ToUnicodeMap::Load(const CPDF_Stream* pStream) {
   CIDSet cid_set = CIDSET_UNKNOWN;
   auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pStream);
   pAcc->LoadAllDataFiltered();
diff --git a/core/fpdfapi/font/cpdf_tounicodemap.h b/core/fpdfapi/font/cpdf_tounicodemap.h
index 62fc470..8f70791 100644
--- a/core/fpdfapi/font/cpdf_tounicodemap.h
+++ b/core/fpdfapi/font/cpdf_tounicodemap.h
@@ -20,7 +20,7 @@
   CPDF_ToUnicodeMap();
   ~CPDF_ToUnicodeMap();
 
-  void Load(CPDF_Stream* pStream);
+  void Load(const CPDF_Stream* pStream);
 
   WideString Lookup(uint32_t charcode) const;
   uint32_t ReverseLookup(wchar_t unicode) const;
diff --git a/core/fpdfapi/parser/cpdf_dictionary.cpp b/core/fpdfapi/parser/cpdf_dictionary.cpp
index 29571d6c..0bdb8a8 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.cpp
+++ b/core/fpdfapi/parser/cpdf_dictionary.cpp
@@ -145,7 +145,11 @@
   return ToArray(GetDirectObjectFor(key));
 }
 
-CPDF_Stream* CPDF_Dictionary::GetStreamFor(const ByteString& key) const {
+const CPDF_Stream* CPDF_Dictionary::GetStreamFor(const ByteString& key) const {
+  return ToStream(GetDirectObjectFor(key));
+}
+
+CPDF_Stream* CPDF_Dictionary::GetStreamFor(const ByteString& key) {
   return ToStream(GetDirectObjectFor(key));
 }
 
diff --git a/core/fpdfapi/parser/cpdf_dictionary.h b/core/fpdfapi/parser/cpdf_dictionary.h
index 8ecbe2d..f2ee588 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.h
+++ b/core/fpdfapi/parser/cpdf_dictionary.h
@@ -52,7 +52,8 @@
   bool GetBooleanFor(const ByteString& key, bool bDefault = false) const;
   float GetNumberFor(const ByteString& key) const;
   CPDF_Dictionary* GetDictFor(const ByteString& key) const;
-  CPDF_Stream* GetStreamFor(const ByteString& key) const;
+  const CPDF_Stream* GetStreamFor(const ByteString& key) const;
+  CPDF_Stream* GetStreamFor(const ByteString& key);
   CPDF_Array* GetArrayFor(const ByteString& key) const;
   CFX_FloatRect GetRectFor(const ByteString& key) const;
   CFX_Matrix GetMatrixFor(const ByteString& key) const;
diff --git a/core/fpdfapi/render/cpdf_dibsource.cpp b/core/fpdfapi/render/cpdf_dibsource.cpp
index 3732eda..b2ebc74 100644
--- a/core/fpdfapi/render/cpdf_dibsource.cpp
+++ b/core/fpdfapi/render/cpdf_dibsource.cpp
@@ -297,7 +297,7 @@
   if (!m_pJbig2Context) {
     m_pJbig2Context = pdfium::MakeUnique<CCodec_Jbig2Context>();
     if (m_pStreamAcc->GetImageParam()) {
-      CPDF_Stream* pGlobals =
+      const CPDF_Stream* pGlobals =
           m_pStreamAcc->GetImageParam()->GetStreamFor("JBIG2Globals");
       if (pGlobals) {
         m_pGlobalStream = pdfium::MakeRetain<CPDF_StreamAcc>(pGlobals);
@@ -653,24 +653,26 @@
 CPDF_DIBSource::LoadState CPDF_DIBSource::StartLoadMask() {
   m_MatteColor = 0XFFFFFFFF;
   m_pMaskStream = m_pDict->GetStreamFor("SMask");
-  if (m_pMaskStream) {
-    CPDF_Array* pMatte = m_pMaskStream->GetDict()->GetArrayFor("Matte");
-    if (pMatte && m_pColorSpace && m_Family != PDFCS_PATTERN &&
-        m_pColorSpace->CountComponents() <= m_nComponents) {
-      float R, G, B;
-      std::vector<float> colors(m_nComponents);
-      for (uint32_t i = 0; i < m_nComponents; i++)
-        colors[i] = pMatte->GetFloatAt(i);
-
-      m_pColorSpace->GetRGB(colors.data(), &R, &G, &B);
-      m_MatteColor = FXARGB_MAKE(0, FXSYS_round(R * 255), FXSYS_round(G * 255),
-                                 FXSYS_round(B * 255));
-    }
-    return StartLoadMaskDIB();
+  if (!m_pMaskStream) {
+    m_pMaskStream = ToStream(m_pDict->GetDirectObjectFor("Mask"));
+    return m_pMaskStream ? StartLoadMaskDIB() : LoadState::kSuccess;
   }
 
-  m_pMaskStream = ToStream(m_pDict->GetDirectObjectFor("Mask"));
-  return m_pMaskStream ? StartLoadMaskDIB() : LoadState::kSuccess;
+  CPDF_Array* pMatte = m_pMaskStream->GetDict()->GetArrayFor("Matte");
+  if (pMatte && m_pColorSpace && m_Family != PDFCS_PATTERN &&
+      m_pColorSpace->CountComponents() <= m_nComponents) {
+    std::vector<float> colors(m_nComponents);
+    for (uint32_t i = 0; i < m_nComponents; i++)
+      colors[i] = pMatte->GetFloatAt(i);
+
+    float R;
+    float G;
+    float B;
+    m_pColorSpace->GetRGB(colors.data(), &R, &G, &B);
+    m_MatteColor = FXARGB_MAKE(0, FXSYS_round(R * 255), FXSYS_round(G * 255),
+                               FXSYS_round(B * 255));
+  }
+  return StartLoadMaskDIB();
 }
 
 CPDF_DIBSource::LoadState CPDF_DIBSource::ContinueLoadMaskDIB(
diff --git a/core/fpdfapi/render/cpdf_dibsource.h b/core/fpdfapi/render/cpdf_dibsource.h
index 50d9c6e..fc390c2 100644
--- a/core/fpdfapi/render/cpdf_dibsource.h
+++ b/core/fpdfapi/render/cpdf_dibsource.h
@@ -156,7 +156,7 @@
   // Must come after |m_pCachedBitmap|.
   std::unique_ptr<CCodec_Jbig2Context> m_pJbig2Context;
 
-  UnownedPtr<CPDF_Stream> m_pMaskStream;
+  UnownedPtr<const CPDF_Stream> m_pMaskStream;
   LoadState m_Status = LoadState::kFail;
 };
 
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 89cddba..8c3c879 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1467,7 +1467,7 @@
   if (blend_type == FXDIB_BLEND_UNSUPPORTED)
     return true;
 
-  const CPDF_Dictionary* pSMaskDict =
+  CPDF_Dictionary* pSMaskDict =
       ToDictionary(pPageObj->m_GeneralState.GetSoftMask());
   if (pSMaskDict) {
     if (pPageObj->IsImage() &&
@@ -2525,7 +2525,7 @@
 }
 
 RetainPtr<CFX_DIBitmap> CPDF_RenderStatus::LoadSMask(
-    const CPDF_Dictionary* pSMaskDict,
+    CPDF_Dictionary* pSMaskDict,
     FX_RECT* pClipRect,
     const CFX_Matrix* pMatrix) {
   if (!pSMaskDict)
diff --git a/core/fpdfapi/render/cpdf_renderstatus.h b/core/fpdfapi/render/cpdf_renderstatus.h
index 19d613c..7dee814 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.h
+++ b/core/fpdfapi/render/cpdf_renderstatus.h
@@ -149,7 +149,7 @@
                                       bool bBackAlphaRequired,
                                       int* left,
                                       int* top);
-  RetainPtr<CFX_DIBitmap> LoadSMask(const CPDF_Dictionary* pSMaskDict,
+  RetainPtr<CFX_DIBitmap> LoadSMask(CPDF_Dictionary* pSMaskDict,
                                     FX_RECT* pClipRect,
                                     const CFX_Matrix* pMatrix);
   // Optionally write the colorspace family value into |pCSFamily|.
diff --git a/fpdfsdk/cpdfsdk_helpers.cpp b/fpdfsdk/cpdfsdk_helpers.cpp
index 0836325..87ba9e2 100644
--- a/fpdfsdk/cpdfsdk_helpers.cpp
+++ b/fpdfsdk/cpdfsdk_helpers.cpp
@@ -248,7 +248,7 @@
   // SharedForm
   const CPDF_Dictionary* pRoot = pDoc->GetRoot();
   if (pRoot) {
-    CPDF_Stream* pStream = pRoot->GetStreamFor("Metadata");
+    const CPDF_Stream* pStream = pRoot->GetStreamFor("Metadata");
     if (pStream) {
       CPDF_Metadata metaData(pStream);
       for (const auto& err : metaData.CheckForSharedForm())