Introduce CONSTRUCT_VIA_MAKE_RETAIN macro.
As much as we generally despise "magic" macros, move the implementation
details of how to force MakeRetain<>-only construction to retain_ptr.h
Change-Id: Ibfa29daa7e2113e4502539c02d6b9026d34f502f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/70670
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cidfont.h b/core/fpdfapi/font/cpdf_cidfont.h
index ce00e1d..8a98d2e 100644
--- a/core/fpdfapi/font/cpdf_cidfont.h
+++ b/core/fpdfapi/font/cpdf_cidfont.h
@@ -34,9 +34,7 @@
class CPDF_CIDFont final : public CPDF_Font {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_CIDFont() override;
static float CIDTransformToFloat(uint8_t ch);
diff --git a/core/fpdfapi/font/cpdf_cmap.h b/core/fpdfapi/font/cpdf_cmap.h
index ac9ecff..5c0efa6 100644
--- a/core/fpdfapi/font/cpdf_cmap.h
+++ b/core/fpdfapi/font/cpdf_cmap.h
@@ -48,8 +48,7 @@
uint16_t m_StartCID;
};
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
bool IsLoaded() const { return m_bLoaded; }
bool IsVertWriting() const { return m_bVertical; }
diff --git a/core/fpdfapi/font/cpdf_truetypefont.h b/core/fpdfapi/font/cpdf_truetypefont.h
index caa1625..1bc0f9e 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.h
+++ b/core/fpdfapi/font/cpdf_truetypefont.h
@@ -12,9 +12,7 @@
class CPDF_TrueTypeFont final : public CPDF_SimpleFont {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_TrueTypeFont() override;
// CPDF_Font:
diff --git a/core/fpdfapi/font/cpdf_type1font.h b/core/fpdfapi/font/cpdf_type1font.h
index 79dfe31..49e5d2c 100644
--- a/core/fpdfapi/font/cpdf_type1font.h
+++ b/core/fpdfapi/font/cpdf_type1font.h
@@ -14,9 +14,7 @@
class CPDF_Type1Font final : public CPDF_SimpleFont {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_Type1Font() override;
// CPDF_Font:
diff --git a/core/fpdfapi/font/cpdf_type3font.h b/core/fpdfapi/font/cpdf_type3font.h
index 1ef469b..8205aa7 100644
--- a/core/fpdfapi/font/cpdf_type3font.h
+++ b/core/fpdfapi/font/cpdf_type3font.h
@@ -22,9 +22,7 @@
class CPDF_Type3Font final : public CPDF_SimpleFont {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_Type3Font() override;
// CPDF_Font:
diff --git a/core/fpdfapi/page/cpdf_clippath.h b/core/fpdfapi/page/cpdf_clippath.h
index aff2839..3f81a50 100644
--- a/core/fpdfapi/page/cpdf_clippath.h
+++ b/core/fpdfapi/page/cpdf_clippath.h
@@ -47,8 +47,7 @@
private:
class PathData final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
RetainPtr<PathData> Clone() const;
diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index f6e26e7..b46dd28 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -107,9 +107,7 @@
class CPDF_CalGray final : public CPDF_ColorSpace {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_CalGray() override;
// CPDF_ColorSpace:
@@ -136,9 +134,7 @@
class CPDF_CalRGB final : public CPDF_ColorSpace {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_CalRGB() override;
// CPDF_ColorSpace:
@@ -169,9 +165,7 @@
class CPDF_LabCS final : public CPDF_ColorSpace {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_LabCS() override;
// CPDF_ColorSpace:
@@ -202,9 +196,7 @@
class CPDF_ICCBasedCS final : public CPDF_ColorSpace {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_ICCBasedCS() override;
// CPDF_ColorSpace:
@@ -242,9 +234,7 @@
class CPDF_IndexedCS final : public CPDF_ColorSpace {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_IndexedCS() override;
// CPDF_ColorSpace:
@@ -266,9 +256,7 @@
class CPDF_SeparationCS final : public CPDF_ColorSpace {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_SeparationCS() override;
// CPDF_ColorSpace:
@@ -293,9 +281,7 @@
class CPDF_DeviceNCS final : public CPDF_ColorSpace {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_DeviceNCS() override;
// CPDF_ColorSpace:
diff --git a/core/fpdfapi/page/cpdf_colorstate.h b/core/fpdfapi/page/cpdf_colorstate.h
index f0f6ebd..13386c7 100644
--- a/core/fpdfapi/page/cpdf_colorstate.h
+++ b/core/fpdfapi/page/cpdf_colorstate.h
@@ -56,8 +56,7 @@
private:
class ColorData final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
RetainPtr<ColorData> Clone() const;
diff --git a/core/fpdfapi/page/cpdf_devicecs.h b/core/fpdfapi/page/cpdf_devicecs.h
index c8e256c..933a881 100644
--- a/core/fpdfapi/page/cpdf_devicecs.h
+++ b/core/fpdfapi/page/cpdf_devicecs.h
@@ -14,9 +14,7 @@
class CPDF_DeviceCS final : public CPDF_ColorSpace {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_DeviceCS() override;
// CPDF_ColorSpace:
diff --git a/core/fpdfapi/page/cpdf_dib.h b/core/fpdfapi/page/cpdf_dib.h
index f2f92c9..66decf3 100644
--- a/core/fpdfapi/page/cpdf_dib.h
+++ b/core/fpdfapi/page/cpdf_dib.h
@@ -40,8 +40,7 @@
public:
enum class LoadState : uint8_t { kFail, kSuccess, kContinue };
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
bool Load(CPDF_Document* pDoc, const CPDF_Stream* pStream);
diff --git a/core/fpdfapi/page/cpdf_generalstate.h b/core/fpdfapi/page/cpdf_generalstate.h
index f374380..dd4f4bc 100644
--- a/core/fpdfapi/page/cpdf_generalstate.h
+++ b/core/fpdfapi/page/cpdf_generalstate.h
@@ -80,8 +80,7 @@
private:
class StateData final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
RetainPtr<StateData> Clone() const;
diff --git a/core/fpdfapi/page/cpdf_iccprofile.h b/core/fpdfapi/page/cpdf_iccprofile.h
index 070f884..a8ee297 100644
--- a/core/fpdfapi/page/cpdf_iccprofile.h
+++ b/core/fpdfapi/page/cpdf_iccprofile.h
@@ -21,8 +21,7 @@
class CPDF_IccProfile final : public Retainable, public Observable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
const CPDF_Stream* GetStream() const { return m_pStream.Get(); }
bool IsValid() const { return IsSRGB() || IsSupported(); }
diff --git a/core/fpdfapi/page/cpdf_image.h b/core/fpdfapi/page/cpdf_image.h
index 4194d49..d5d8c0b 100644
--- a/core/fpdfapi/page/cpdf_image.h
+++ b/core/fpdfapi/page/cpdf_image.h
@@ -25,8 +25,7 @@
class CPDF_Image final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
static bool IsValidJpegComponent(int32_t comps);
static bool IsValidJpegBitsPerComponent(int32_t bpc);
diff --git a/core/fpdfapi/page/cpdf_occontext.h b/core/fpdfapi/page/cpdf_occontext.h
index 0a68639..6506181 100644
--- a/core/fpdfapi/page/cpdf_occontext.h
+++ b/core/fpdfapi/page/cpdf_occontext.h
@@ -21,8 +21,7 @@
public:
enum UsageType { View = 0, Design, Print, Export };
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
bool CheckOCGVisible(const CPDF_Dictionary* pOCGDict) const;
bool CheckObjectVisible(const CPDF_PageObject* pObj) const;
diff --git a/core/fpdfapi/page/cpdf_page.h b/core/fpdfapi/page/cpdf_page.h
index 9bdb75d..c8dc45c 100644
--- a/core/fpdfapi/page/cpdf_page.h
+++ b/core/fpdfapi/page/cpdf_page.h
@@ -51,8 +51,7 @@
UnownedPtr<CPDF_Page> const m_pPage;
};
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// IPDF_Page:
CPDF_Page* AsPDFPage() override;
diff --git a/core/fpdfapi/page/cpdf_patterncs.h b/core/fpdfapi/page/cpdf_patterncs.h
index b6b46f6..69e0754 100644
--- a/core/fpdfapi/page/cpdf_patterncs.h
+++ b/core/fpdfapi/page/cpdf_patterncs.h
@@ -16,9 +16,7 @@
class CPDF_PatternCS final : public CPDF_ColorSpace {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_PatternCS() override;
// Called for the stock pattern, since it is not initialized via
diff --git a/core/fpdfapi/page/cpdf_shadingpattern.h b/core/fpdfapi/page/cpdf_shadingpattern.h
index 392aa27..5ce809e 100644
--- a/core/fpdfapi/page/cpdf_shadingpattern.h
+++ b/core/fpdfapi/page/cpdf_shadingpattern.h
@@ -38,9 +38,7 @@
class CPDF_ShadingPattern final : public CPDF_Pattern {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_ShadingPattern() override;
// CPDF_Pattern:
diff --git a/core/fpdfapi/page/cpdf_textstate.h b/core/fpdfapi/page/cpdf_textstate.h
index 4ce70c3..a9e968e 100644
--- a/core/fpdfapi/page/cpdf_textstate.h
+++ b/core/fpdfapi/page/cpdf_textstate.h
@@ -61,8 +61,7 @@
private:
class TextData final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
RetainPtr<TextData> Clone() const;
diff --git a/core/fpdfapi/page/cpdf_tilingpattern.h b/core/fpdfapi/page/cpdf_tilingpattern.h
index 134da8e..9689947 100644
--- a/core/fpdfapi/page/cpdf_tilingpattern.h
+++ b/core/fpdfapi/page/cpdf_tilingpattern.h
@@ -20,9 +20,7 @@
class CPDF_TilingPattern final : public CPDF_Pattern {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CPDF_TilingPattern() override;
// CPDF_Pattern:
diff --git a/core/fpdfapi/page/cpdf_transferfunc.h b/core/fpdfapi/page/cpdf_transferfunc.h
index 1bc159d..ae2f2f4 100644
--- a/core/fpdfapi/page/cpdf_transferfunc.h
+++ b/core/fpdfapi/page/cpdf_transferfunc.h
@@ -21,8 +21,7 @@
class CPDF_TransferFunc final : public Retainable, public Observable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
static constexpr size_t kChannelSampleSize = 256;
diff --git a/core/fpdfapi/page/cpdf_transferfuncdib.h b/core/fpdfapi/page/cpdf_transferfuncdib.h
index a0fec72..59dfa8f 100644
--- a/core/fpdfapi/page/cpdf_transferfuncdib.h
+++ b/core/fpdfapi/page/cpdf_transferfuncdib.h
@@ -17,8 +17,7 @@
class CPDF_TransferFuncDIB final : public CFX_DIBBase {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
void TranslateScanline(
const uint8_t* src_buf,
diff --git a/core/fpdfapi/parser/cpdf_array.h b/core/fpdfapi/parser/cpdf_array.h
index 4104706..c3b3795 100644
--- a/core/fpdfapi/parser/cpdf_array.h
+++ b/core/fpdfapi/parser/cpdf_array.h
@@ -22,8 +22,7 @@
public:
using const_iterator = std::vector<RetainPtr<CPDF_Object>>::const_iterator;
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// CPDF_Object:
Type GetType() const override;
diff --git a/core/fpdfapi/parser/cpdf_boolean.h b/core/fpdfapi/parser/cpdf_boolean.h
index 8ef47ad..689c7bf 100644
--- a/core/fpdfapi/parser/cpdf_boolean.h
+++ b/core/fpdfapi/parser/cpdf_boolean.h
@@ -15,8 +15,7 @@
class CPDF_Boolean final : public CPDF_Object {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// CPDF_Object:
Type GetType() const override;
diff --git a/core/fpdfapi/parser/cpdf_dictionary.h b/core/fpdfapi/parser/cpdf_dictionary.h
index 46e8b68..f8ff3ca 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.h
+++ b/core/fpdfapi/parser/cpdf_dictionary.h
@@ -28,8 +28,7 @@
using const_iterator =
std::map<ByteString, RetainPtr<CPDF_Object>>::const_iterator;
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// CPDF_Object:
Type GetType() const override;
diff --git a/core/fpdfapi/parser/cpdf_name.h b/core/fpdfapi/parser/cpdf_name.h
index cfd90bb..75c8598 100644
--- a/core/fpdfapi/parser/cpdf_name.h
+++ b/core/fpdfapi/parser/cpdf_name.h
@@ -15,8 +15,7 @@
class CPDF_Name final : public CPDF_Object {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// CPDF_Object:
Type GetType() const override;
diff --git a/core/fpdfapi/parser/cpdf_null.h b/core/fpdfapi/parser/cpdf_null.h
index 767583b..7672a8d 100644
--- a/core/fpdfapi/parser/cpdf_null.h
+++ b/core/fpdfapi/parser/cpdf_null.h
@@ -13,8 +13,7 @@
class CPDF_Null final : public CPDF_Object {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// CPDF_Object.
Type GetType() const override;
diff --git a/core/fpdfapi/parser/cpdf_number.h b/core/fpdfapi/parser/cpdf_number.h
index dc75340..fb0a205 100644
--- a/core/fpdfapi/parser/cpdf_number.h
+++ b/core/fpdfapi/parser/cpdf_number.h
@@ -16,8 +16,7 @@
class CPDF_Number final : public CPDF_Object {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// CPDF_Object:
Type GetType() const override;
diff --git a/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp b/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
index 7af079f..15702b0 100644
--- a/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
@@ -22,8 +22,7 @@
class TestReadValidator final : public CPDF_ReadValidator {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
void SimulateReadError() { ReadBlockAtOffset(nullptr, 0, 1); }
diff --git a/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp b/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
index 0c5f240..979dbe5 100644
--- a/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
@@ -22,8 +22,7 @@
class TestReadValidator final : public CPDF_ReadValidator {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
void SimulateReadError() { ReadBlockAtOffset(nullptr, 0, 1); }
diff --git a/core/fpdfapi/parser/cpdf_read_validator.h b/core/fpdfapi/parser/cpdf_read_validator.h
index 6adde02..da4d7c2 100644
--- a/core/fpdfapi/parser/cpdf_read_validator.h
+++ b/core/fpdfapi/parser/cpdf_read_validator.h
@@ -21,8 +21,7 @@
bool saved_has_unavailable_data_;
};
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
void SetDownloadHints(CPDF_DataAvail::DownloadHints* hints) {
hints_ = hints;
diff --git a/core/fpdfapi/parser/cpdf_reference.h b/core/fpdfapi/parser/cpdf_reference.h
index 1ec7282..25b8008 100644
--- a/core/fpdfapi/parser/cpdf_reference.h
+++ b/core/fpdfapi/parser/cpdf_reference.h
@@ -17,8 +17,7 @@
class CPDF_Reference final : public CPDF_Object {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// CPDF_Object:
Type GetType() const override;
diff --git a/core/fpdfapi/parser/cpdf_security_handler.h b/core/fpdfapi/parser/cpdf_security_handler.h
index 05eb689..3e84099 100644
--- a/core/fpdfapi/parser/cpdf_security_handler.h
+++ b/core/fpdfapi/parser/cpdf_security_handler.h
@@ -25,8 +25,7 @@
class CPDF_SecurityHandler : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
bool OnInit(const CPDF_Dictionary* pEncryptDict,
const CPDF_Array* pIdArray,
diff --git a/core/fpdfapi/parser/cpdf_stream.h b/core/fpdfapi/parser/cpdf_stream.h
index 3dba365..d1d98d3 100644
--- a/core/fpdfapi/parser/cpdf_stream.h
+++ b/core/fpdfapi/parser/cpdf_stream.h
@@ -19,8 +19,7 @@
public:
static constexpr int kFileBufSize = 512;
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// CPDF_Object:
Type GetType() const override;
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.h b/core/fpdfapi/parser/cpdf_stream_acc.h
index 046fe5d..870b9bc 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.h
+++ b/core/fpdfapi/parser/cpdf_stream_acc.h
@@ -21,8 +21,7 @@
class CPDF_StreamAcc final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
CPDF_StreamAcc(const CPDF_StreamAcc&) = delete;
CPDF_StreamAcc& operator=(const CPDF_StreamAcc&) = delete;
diff --git a/core/fpdfapi/parser/cpdf_string.h b/core/fpdfapi/parser/cpdf_string.h
index 8efc71b..0c32dfa 100644
--- a/core/fpdfapi/parser/cpdf_string.h
+++ b/core/fpdfapi/parser/cpdf_string.h
@@ -17,8 +17,7 @@
class CPDF_String final : public CPDF_Object {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// CPDF_Object:
Type GetType() const override;
diff --git a/core/fpdfapi/render/cpdf_type3cache.h b/core/fpdfapi/render/cpdf_type3cache.h
index 4371a01..7096a5d 100644
--- a/core/fpdfapi/render/cpdf_type3cache.h
+++ b/core/fpdfapi/render/cpdf_type3cache.h
@@ -22,8 +22,7 @@
class CPDF_Type3Cache final : public Retainable, public Observable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
const CFX_GlyphBitmap* LoadGlyph(uint32_t charcode,
const CFX_Matrix* pMatrix);
diff --git a/core/fpdfdoc/cpdf_structelement.h b/core/fpdfdoc/cpdf_structelement.h
index 54042a9..eecaeaa 100644
--- a/core/fpdfdoc/cpdf_structelement.h
+++ b/core/fpdfdoc/cpdf_structelement.h
@@ -36,8 +36,7 @@
class CPDF_StructElement final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
ByteString GetType() const { return m_Type; }
WideString GetAltText() const;
diff --git a/core/fxcodec/cfx_codec_memory.h b/core/fxcodec/cfx_codec_memory.h
index 57c1ae6..9b1e93a 100644
--- a/core/fxcodec/cfx_codec_memory.h
+++ b/core/fxcodec/cfx_codec_memory.h
@@ -13,8 +13,7 @@
class CFX_CodecMemory final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
pdfium::span<uint8_t> GetSpan() { return {buffer_.get(), size_}; }
uint8_t* GetBuffer() { return buffer_.get(); }
diff --git a/core/fxcrt/cfx_memorystream.h b/core/fxcrt/cfx_memorystream.h
index ce6fd64..ff5ee1d 100644
--- a/core/fxcrt/cfx_memorystream.h
+++ b/core/fxcrt/cfx_memorystream.h
@@ -15,8 +15,7 @@
class CFX_MemoryStream final : public IFX_SeekableStream {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// IFX_SeekableStream
FX_FILESIZE GetSize() override;
diff --git a/core/fxcrt/cfx_readonlymemorystream.h b/core/fxcrt/cfx_readonlymemorystream.h
index ea2b849..ecdc637 100644
--- a/core/fxcrt/cfx_readonlymemorystream.h
+++ b/core/fxcrt/cfx_readonlymemorystream.h
@@ -16,8 +16,7 @@
class CFX_ReadOnlyMemoryStream final : public IFX_SeekableReadStream {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// IFX_SeekableReadStream:
FX_FILESIZE GetSize() override;
diff --git a/core/fxcrt/cfx_seekablestreamproxy.h b/core/fxcrt/cfx_seekablestreamproxy.h
index d6ea160..b169606 100644
--- a/core/fxcrt/cfx_seekablestreamproxy.h
+++ b/core/fxcrt/cfx_seekablestreamproxy.h
@@ -13,8 +13,7 @@
class CFX_SeekableStreamProxy final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// Unlike IFX_SeekableStreamProxy, buffers and sizes are always in terms
// of the number of wchar_t elementss, not bytes.
diff --git a/core/fxcrt/css/cfx_csscomputedstyle.h b/core/fxcrt/css/cfx_csscomputedstyle.h
index cd3ce16..7be2cb4 100644
--- a/core/fxcrt/css/cfx_csscomputedstyle.h
+++ b/core/fxcrt/css/cfx_csscomputedstyle.h
@@ -56,8 +56,7 @@
bool m_bHasPadding;
};
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
int32_t CountFontFamilies() const;
const WideString GetFontFamily(int32_t index) const;
diff --git a/core/fxcrt/fx_stream.cpp b/core/fxcrt/fx_stream.cpp
index cf3b840..40135e5 100644
--- a/core/fxcrt/fx_stream.cpp
+++ b/core/fxcrt/fx_stream.cpp
@@ -38,8 +38,7 @@
class CFX_CRTFileStream final : public IFX_SeekableStream {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// IFX_SeekableStream:
FX_FILESIZE GetSize() override { return m_pFile->GetSize(); }
diff --git a/core/fxcrt/retain_ptr.h b/core/fxcrt/retain_ptr.h
index 2598f1d..d58cbf0 100644
--- a/core/fxcrt/retain_ptr.h
+++ b/core/fxcrt/retain_ptr.h
@@ -170,4 +170,10 @@
} // namespace pdfium
+// Macro to allow construction via MakeRetain<>() only, when used
+// with a private constructor in a class.
+#define CONSTRUCT_VIA_MAKE_RETAIN \
+ template <typename T, typename... Args> \
+ friend RetainPtr<T> pdfium::MakeRetain(Args&&... args)
+
#endif // CORE_FXCRT_RETAIN_PTR_H_
diff --git a/core/fxcrt/retained_tree_node_unittest.cpp b/core/fxcrt/retained_tree_node_unittest.cpp
index d469ab3..a9190f0 100644
--- a/core/fxcrt/retained_tree_node_unittest.cpp
+++ b/core/fxcrt/retained_tree_node_unittest.cpp
@@ -15,8 +15,7 @@
: public RetainedTreeNode<ObservableRetainedTreeNodeForTest>,
public Observable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
private:
ObservableRetainedTreeNodeForTest() = default;
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h
index 144961e..1c4f68c 100644
--- a/core/fxge/cfx_fontmgr.h
+++ b/core/fxge/cfx_fontmgr.h
@@ -27,9 +27,7 @@
public:
class FontDesc final : public Retainable, public Observable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~FontDesc() override;
pdfium::span<uint8_t> FontData() const {
diff --git a/core/fxge/cfx_glyphcache.h b/core/fxge/cfx_glyphcache.h
index 5a24424..caf9172 100644
--- a/core/fxge/cfx_glyphcache.h
+++ b/core/fxge/cfx_glyphcache.h
@@ -28,9 +28,7 @@
class CFX_GlyphCache : public Retainable, public Observable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CFX_GlyphCache() override;
const CFX_GlyphBitmap* LoadGlyphBitmap(const CFX_Font* pFont,
diff --git a/core/fxge/cfx_graphstatedata.h b/core/fxge/cfx_graphstatedata.h
index e8ece9f..005b299 100644
--- a/core/fxge/cfx_graphstatedata.h
+++ b/core/fxge/cfx_graphstatedata.h
@@ -45,8 +45,7 @@
class CFX_RetainableGraphStateData : public Retainable,
public CFX_GraphStateData {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
RetainPtr<CFX_RetainableGraphStateData> Clone() const;
diff --git a/core/fxge/cfx_pathdata.h b/core/fxge/cfx_pathdata.h
index 9714104..e1c8589 100644
--- a/core/fxge/cfx_pathdata.h
+++ b/core/fxge/cfx_pathdata.h
@@ -76,8 +76,7 @@
class CFX_RetainablePathData final : public Retainable, public CFX_PathData {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
RetainPtr<CFX_RetainablePathData> Clone() const;
diff --git a/core/fxge/dib/cfx_dibitmap.h b/core/fxge/dib/cfx_dibitmap.h
index ce53df8..41b40ab 100644
--- a/core/fxge/dib/cfx_dibitmap.h
+++ b/core/fxge/dib/cfx_dibitmap.h
@@ -16,8 +16,7 @@
class CFX_DIBitmap : public CFX_DIBBase {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
bool Create(int width, int height, FXDIB_Format format);
diff --git a/core/fxge/win32/cfx_windowsdib.h b/core/fxge/win32/cfx_windowsdib.h
index ef6127b..184b197 100644
--- a/core/fxge/win32/cfx_windowsdib.h
+++ b/core/fxge/win32/cfx_windowsdib.h
@@ -24,8 +24,7 @@
class CFX_WindowsDIB final : public CFX_DIBitmap {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
static ByteString GetBitmapInfo(const RetainPtr<CFX_DIBitmap>& pBitmap);
static HBITMAP GetDDBitmap(const RetainPtr<CFX_DIBitmap>& pBitmap, HDC hDC);
diff --git a/fpdfsdk/cpdfsdk_customaccess.h b/fpdfsdk/cpdfsdk_customaccess.h
index 76940ce..8037bff 100644
--- a/fpdfsdk/cpdfsdk_customaccess.h
+++ b/fpdfsdk/cpdfsdk_customaccess.h
@@ -12,8 +12,7 @@
class CPDFSDK_CustomAccess final : public IFX_SeekableReadStream {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// IFX_SeekableReadStream
FX_FILESIZE GetSize() override;
diff --git a/fpdfsdk/cpdfsdk_filewriteadapter.h b/fpdfsdk/cpdfsdk_filewriteadapter.h
index fc42b7f..0a05422 100644
--- a/fpdfsdk/cpdfsdk_filewriteadapter.h
+++ b/fpdfsdk/cpdfsdk_filewriteadapter.h
@@ -14,8 +14,7 @@
class CPDFSDK_FileWriteAdapter final : public IFX_RetainableWriteStream {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// IFX_WriteStream:
bool WriteBlock(const void* data, size_t size) override;
diff --git a/fpdfsdk/cpdfsdk_helpers.cpp b/fpdfsdk/cpdfsdk_helpers.cpp
index 33d27ad..ef02222 100644
--- a/fpdfsdk/cpdfsdk_helpers.cpp
+++ b/fpdfsdk/cpdfsdk_helpers.cpp
@@ -71,8 +71,7 @@
#ifdef PDF_ENABLE_XFA
class FPDF_FileHandlerContext final : public IFX_SeekableStream {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// IFX_SeekableStream:
FX_FILESIZE GetSize() override;
diff --git a/fpdfsdk/fpdf_dataavail.cpp b/fpdfsdk/fpdf_dataavail.cpp
index 9933e51..05713ff 100644
--- a/fpdfsdk/fpdf_dataavail.cpp
+++ b/fpdfsdk/fpdf_dataavail.cpp
@@ -65,8 +65,7 @@
class FPDF_FileAccessContext final : public IFX_SeekableReadStream {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// IFX_SeekableReadStream:
FX_FILESIZE GetSize() override { return file_->m_FileLen; }
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.h b/fpdfsdk/fpdfxfa/cpdfxfa_page.h
index c121bab..b7655ef 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.h
@@ -24,8 +24,7 @@
class CPDFXFA_Page final : public IPDF_Page {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// IPDF_Page:
CPDF_Page* AsPDFPage() override;
diff --git a/testing/invalid_seekable_read_stream.h b/testing/invalid_seekable_read_stream.h
index 9322bc6..8eee02d 100644
--- a/testing/invalid_seekable_read_stream.h
+++ b/testing/invalid_seekable_read_stream.h
@@ -10,8 +10,7 @@
// A stream used for testing where reads always fail.
class InvalidSeekableReadStream final : public IFX_SeekableReadStream {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
// IFX_SeekableReadStream overrides:
bool ReadBlockAtOffset(void* buffer,
diff --git a/xfa/fgas/font/cfgas_gefont.h b/xfa/fgas/font/cfgas_gefont.h
index 7e021e1..1649d8d 100644
--- a/xfa/fgas/font/cfgas_gefont.h
+++ b/xfa/fgas/font/cfgas_gefont.h
@@ -27,8 +27,7 @@
class CFGAS_GEFont final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
static RetainPtr<CFGAS_GEFont> LoadFont(const wchar_t* pszFontFamily,
uint32_t dwFontStyles,
diff --git a/xfa/fgas/layout/cfx_linkuserdata.h b/xfa/fgas/layout/cfx_linkuserdata.h
index 83b43a2..431665b 100644
--- a/xfa/fgas/layout/cfx_linkuserdata.h
+++ b/xfa/fgas/layout/cfx_linkuserdata.h
@@ -13,8 +13,7 @@
class CFX_LinkUserData final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
const wchar_t* GetLinkURL() const { return m_wsURLContent.c_str(); }
diff --git a/xfa/fgas/layout/cfx_textuserdata.h b/xfa/fgas/layout/cfx_textuserdata.h
index d5aaed9..13dc425 100644
--- a/xfa/fgas/layout/cfx_textuserdata.h
+++ b/xfa/fgas/layout/cfx_textuserdata.h
@@ -14,8 +14,7 @@
class CFX_TextUserData final : public Retainable {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+ CONSTRUCT_VIA_MAKE_RETAIN;
RetainPtr<CFX_CSSComputedStyle> m_pStyle;
RetainPtr<CFX_LinkUserData> m_pLinkData;
diff --git a/xfa/fxfa/layout/cxfa_contentlayoutitem.h b/xfa/fxfa/layout/cxfa_contentlayoutitem.h
index 063f9a3..0e297aa 100644
--- a/xfa/fxfa/layout/cxfa_contentlayoutitem.h
+++ b/xfa/fxfa/layout/cxfa_contentlayoutitem.h
@@ -17,9 +17,7 @@
class CXFA_ContentLayoutItem : public CXFA_LayoutItem {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CXFA_ContentLayoutItem() override;
CXFA_FFWidget* GetFFWidget() { return m_pFFWidget.get(); }
diff --git a/xfa/fxfa/layout/cxfa_viewlayoutitem.h b/xfa/fxfa/layout/cxfa_viewlayoutitem.h
index 1c9f77c..e181774 100644
--- a/xfa/fxfa/layout/cxfa_viewlayoutitem.h
+++ b/xfa/fxfa/layout/cxfa_viewlayoutitem.h
@@ -15,9 +15,7 @@
class CXFA_ViewLayoutItem : public CXFA_LayoutItem {
public:
- template <typename T, typename... Args>
- friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
+ CONSTRUCT_VIA_MAKE_RETAIN;
~CXFA_ViewLayoutItem() override;
CXFA_FFPageView* GetPageView() const { return m_pFFPageView.get(); }