Return retained result from GetShadingObject()
Resolve a TODO() from the previous CL.
Change-Id: I12e5ad56fd681322b2782568ddb4cbe8be16f2b4
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/98771
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_pattern.h b/core/fpdfapi/page/cpdf_pattern.h
index 36d64ad..118e840 100644
--- a/core/fpdfapi/page/cpdf_pattern.h
+++ b/core/fpdfapi/page/cpdf_pattern.h
@@ -7,13 +7,13 @@
#ifndef CORE_FPDFAPI_PAGE_CPDF_PATTERN_H_
#define CORE_FPDFAPI_PAGE_CPDF_PATTERN_H_
+#include "core/fpdfapi/parser/cpdf_object.h"
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/observed_ptr.h"
#include "core/fxcrt/retain_ptr.h"
#include "core/fxcrt/unowned_ptr.h"
class CPDF_Document;
-class CPDF_Object;
class CPDF_ShadingPattern;
class CPDF_TilingPattern;
@@ -29,7 +29,7 @@
// All the getters that return pointers return non-NULL pointers.
CPDF_Document* document() const { return m_pDocument.Get(); }
- CPDF_Object* pattern_obj() const { return m_pPatternObj.Get(); }
+ RetainPtr<CPDF_Object> pattern_obj() const { return m_pPatternObj; }
const CFX_Matrix& pattern_to_form() const { return m_Pattern2Form; }
const CFX_Matrix& parent_matrix() const { return m_ParentMatrix; }
diff --git a/core/fpdfapi/page/cpdf_shadingpattern.cpp b/core/fpdfapi/page/cpdf_shadingpattern.cpp
index db51f4c..00f50b0 100644
--- a/core/fpdfapi/page/cpdf_shadingpattern.cpp
+++ b/core/fpdfapi/page/cpdf_shadingpattern.cpp
@@ -51,7 +51,7 @@
if (m_ShadingType != kInvalidShading)
return true;
- const CPDF_Object* pShadingObj = GetShadingObject();
+ RetainPtr<const CPDF_Object> pShadingObj = GetShadingObject();
RetainPtr<const CPDF_Dictionary> pShadingDict =
pShadingObj ? pShadingObj->GetDict() : nullptr;
if (!pShadingDict)
@@ -87,10 +87,9 @@
return Validate();
}
-const CPDF_Object* CPDF_ShadingPattern::GetShadingObject() const {
- return m_bShading
- ? pattern_obj()
- : pattern_obj()->GetDict()->GetDirectObjectFor("Shading").Get();
+RetainPtr<const CPDF_Object> CPDF_ShadingPattern::GetShadingObject() const {
+ return m_bShading ? pattern_obj()
+ : pattern_obj()->GetDict()->GetDirectObjectFor("Shading");
}
bool CPDF_ShadingPattern::Validate() const {
diff --git a/core/fpdfapi/page/cpdf_shadingpattern.h b/core/fpdfapi/page/cpdf_shadingpattern.h
index 2a99d4e..7f741a0 100644
--- a/core/fpdfapi/page/cpdf_shadingpattern.h
+++ b/core/fpdfapi/page/cpdf_shadingpattern.h
@@ -54,7 +54,7 @@
ShadingType GetShadingType() const { return m_ShadingType; }
bool IsShadingObject() const { return m_bShading; }
- const CPDF_Object* GetShadingObject() const;
+ RetainPtr<const CPDF_Object> GetShadingObject() const;
RetainPtr<CPDF_ColorSpace> GetCS() const { return m_pCS; }
const std::vector<std::unique_ptr<CPDF_Function>>& GetFuncs() const {
return m_pFunctions;
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index 347a7aa..794935b 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -66,7 +66,7 @@
CFX_FloatRect GetShadingBBox(CPDF_ShadingPattern* pShading,
const CFX_Matrix& matrix) {
ShadingType type = pShading->GetShadingType();
- RetainPtr<const CPDF_Stream> pStream(ToStream(pShading->GetShadingObject()));
+ RetainPtr<const CPDF_Stream> pStream = ToStream(pShading->GetShadingObject());
RetainPtr<CPDF_ColorSpace> pCS = pShading->GetCS();
if (!pStream || !pCS)
return CFX_FloatRect();
diff --git a/core/fpdfapi/render/cpdf_rendershading.cpp b/core/fpdfapi/render/cpdf_rendershading.cpp
index fa098c8..df6e23d 100644
--- a/core/fpdfapi/render/cpdf_rendershading.cpp
+++ b/core/fpdfapi/render/cpdf_rendershading.cpp
@@ -941,8 +941,8 @@
case kFreeFormGouraudTriangleMeshShading: {
// The shading object can be a stream or a dictionary. We do not handle
// the case of dictionary at the moment.
- RetainPtr<const CPDF_Stream> pStream(
- ToStream(pPattern->GetShadingObject()));
+ RetainPtr<const CPDF_Stream> pStream =
+ ToStream(pPattern->GetShadingObject());
if (pStream) {
DrawFreeGouraudShading(pBitmap, final_matrix, std::move(pStream), funcs,
pColorSpace, alpha);
@@ -952,8 +952,8 @@
case kLatticeFormGouraudTriangleMeshShading: {
// The shading object can be a stream or a dictionary. We do not handle
// the case of dictionary at the moment.
- RetainPtr<const CPDF_Stream> pStream(
- ToStream(pPattern->GetShadingObject()));
+ RetainPtr<const CPDF_Stream> pStream =
+ ToStream(pPattern->GetShadingObject());
if (pStream) {
DrawLatticeGouraudShading(pBitmap, final_matrix, std::move(pStream),
funcs, pColorSpace, alpha);
@@ -964,9 +964,8 @@
case kTensorProductPatchMeshShading: {
// The shading object can be a stream or a dictionary. We do not handle
// the case of dictionary at the moment.
- // TODO(tsepez): GetShadinObject() should return retained object.
- RetainPtr<const CPDF_Stream> pStream(
- ToStream(pPattern->GetShadingObject()));
+ RetainPtr<const CPDF_Stream> pStream =
+ ToStream(pPattern->GetShadingObject());
if (pStream) {
DrawCoonPatchMeshes(pPattern->GetShadingType(), pBitmap, final_matrix,
std::move(pStream), funcs, pColorSpace,
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index 38638ed..0511086 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -2348,12 +2348,12 @@
skPath.transform(inverse);
} else {
DCHECK_EQ(kCoonsPatchMeshShading, shadingType);
- RetainPtr<const CPDF_Stream> pStream(
- ToStream(pPattern->GetShadingObject()));
+ RetainPtr<const CPDF_Stream> pStream =
+ ToStream(pPattern->GetShadingObject());
if (!pStream)
return false;
- CPDF_MeshStream stream(shadingType, pPattern->GetFuncs(), pStream,
- pPattern->GetCS());
+ CPDF_MeshStream stream(shadingType, pPattern->GetFuncs(),
+ std::move(pStream), pPattern->GetCS());
if (!stream.Load())
return false;
SkPoint cubics[12];