Rework CPDF_Colorspace static methods and args.
Follow-up as promised in CL review of
https://pdfium-review.googlesource.com/c/pdfium/+/84634
-- Remove unused form of Load() method.
-- Rename methods that can only return stock colorspaces.
-- Pass string to AllocateColorSpace().
-- Make AllocateColorSpace() private apart from tests.
Change-Id: I03cd0775bdc7a2e58fda8b90127738cde6adfc13
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/84670
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
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) {