diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index fd2a80d..5ab6f40 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -468,7 +468,7 @@
 }
 
 // static
-RetainPtr<CPDF_ColorSpace> CPDF_ColorSpace::ColorspaceFromName(
+RetainPtr<CPDF_ColorSpace> CPDF_ColorSpace::GetStockCSForName(
     const ByteString& name) {
   if (name == "DeviceRGB" || name == "RGB")
     return GetStockCS(Family::kDeviceRGB);
@@ -487,13 +487,6 @@
 }
 
 // static
-RetainPtr<CPDF_ColorSpace> CPDF_ColorSpace::Load(CPDF_Document* pDoc,
-                                                 CPDF_Object* pObj) {
-  std::set<const CPDF_Object*> visited;
-  return Load(pDoc, pObj, &visited);
-}
-
-// static
 RetainPtr<CPDF_ColorSpace> CPDF_ColorSpace::Load(
     CPDF_Document* pDoc,
     const CPDF_Object* pObj,
@@ -507,7 +500,7 @@
   ScopedSetInsertion<const CPDF_Object*> insertion(pVisited, pObj);
 
   if (pObj->IsName())
-    return ColorspaceFromName(pObj->GetString());
+    return GetStockCSForName(pObj->GetString());
 
   if (const CPDF_Stream* pStream = pObj->AsStream()) {
     const CPDF_Dictionary* pDict = pStream->GetDict();
@@ -519,7 +512,7 @@
       CPDF_Name* pValue = ToName(it.second.Get());
       if (pValue) {
         RetainPtr<CPDF_ColorSpace> pRet =
-            ColorspaceFromName(pValue->GetString());
+            GetStockCSForName(pValue->GetString());
         if (pRet)
           return pRet;
       }
@@ -537,10 +530,10 @@
 
   ByteString familyname = pFamilyObj->GetString();
   if (pArray->size() == 1)
-    return ColorspaceFromName(familyname);
+    return GetStockCSForName(familyname);
 
   RetainPtr<CPDF_ColorSpace> pCS =
-      CPDF_ColorSpace::AllocateColorSpaceForID(pDoc, familyname.GetID());
+      CPDF_ColorSpace::AllocateColorSpace(pDoc, familyname.AsStringView());
   if (!pCS)
     return nullptr;
 
@@ -553,10 +546,10 @@
 }
 
 // static
-RetainPtr<CPDF_ColorSpace> CPDF_ColorSpace::AllocateColorSpaceForID(
+RetainPtr<CPDF_ColorSpace> CPDF_ColorSpace::AllocateColorSpace(
     CPDF_Document* pDocument,
-    uint32_t family_id) {
-  switch (family_id) {
+    ByteStringView bsFamilyName) {
+  switch (bsFamilyName.GetID()) {
     case FXBSTR_ID('C', 'a', 'l', 'G'):
       return pdfium::MakeRetain<CPDF_CalGray>(pDocument);
     case FXBSTR_ID('C', 'a', 'l', 'R'):
diff --git a/core/fpdfapi/page/cpdf_colorspace.h b/core/fpdfapi/page/cpdf_colorspace.h
index c4bf8d4..f0a9e60 100644
--- a/core/fpdfapi/page/cpdf_colorspace.h
+++ b/core/fpdfapi/page/cpdf_colorspace.h
@@ -69,9 +69,7 @@
   };
 
   static RetainPtr<CPDF_ColorSpace> GetStockCS(Family family);
-  static RetainPtr<CPDF_ColorSpace> ColorspaceFromName(const ByteString& name);
-  static RetainPtr<CPDF_ColorSpace> Load(CPDF_Document* pDoc,
-                                         CPDF_Object* pObj);
+  static RetainPtr<CPDF_ColorSpace> GetStockCSForName(const ByteString& name);
   static RetainPtr<CPDF_ColorSpace> Load(
       CPDF_Document* pDoc,
       const CPDF_Object* pObj,
@@ -145,6 +143,13 @@
   uint32_t m_dwStdConversion = 0;
 
  private:
+  friend class CPDF_CalGray_TranslateImageLine_Test;
+  friend class CPDF_CalRGB_TranslateImageLine_Test;
+
+  static RetainPtr<CPDF_ColorSpace> AllocateColorSpace(
+      CPDF_Document* pDocument,
+      ByteStringView bsFamilyName);
+
   uint32_t m_nComponents = 0;
 };
 
diff --git a/core/fpdfapi/page/cpdf_colorspace_unittest.cpp b/core/fpdfapi/page/cpdf_colorspace_unittest.cpp
index 879c85f..77f26a3 100644
--- a/core/fpdfapi/page/cpdf_colorspace_unittest.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace_unittest.cpp
@@ -14,8 +14,8 @@
   const uint8_t kSrc[12] = {255, 0, 0, 0, 255, 0, 0, 0, 255, 128, 128, 128};
   const uint8_t kExpect[12] = {255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
-  RetainPtr<CPDF_ColorSpace> pCal = CPDF_ColorSpace::AllocateColorSpaceForID(
-      nullptr, FXBSTR_ID('C', 'a', 'l', 'G'));
+  RetainPtr<CPDF_ColorSpace> pCal =
+      CPDF_ColorSpace::AllocateColorSpace(nullptr, "CalG");
   ASSERT_TRUE(pCal);
 
   uint8_t dst[12];
@@ -37,8 +37,8 @@
   const uint8_t kExpectNomask[12] = {0,   0, 255, 0,   255, 0,
                                      255, 0, 0,   128, 128, 128};
 
-  RetainPtr<CPDF_ColorSpace> pCal = CPDF_ColorSpace::AllocateColorSpaceForID(
-      nullptr, FXBSTR_ID('C', 'a', 'l', 'R'));
+  RetainPtr<CPDF_ColorSpace> pCal =
+      CPDF_ColorSpace::AllocateColorSpace(nullptr, "CalR");
   ASSERT_TRUE(pCal);
 
   uint8_t dst[12];
diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp
index d50b833..3aff7b4 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.cpp
+++ b/core/fpdfapi/page/cpdf_docpagedata.cpp
@@ -268,7 +268,7 @@
 
   if (pCSObj->IsName()) {
     ByteString name = pCSObj->GetString();
-    RetainPtr<CPDF_ColorSpace> pCS = CPDF_ColorSpace::ColorspaceFromName(name);
+    RetainPtr<CPDF_ColorSpace> pCS = CPDF_ColorSpace::GetStockCSForName(name);
     if (!pCS && pResources) {
       const CPDF_Dictionary* pList = pResources->GetDictFor("ColorSpace");
       if (pList) {
