Chromium Code Reviews| Index: src/pdf/SkPDFBitmap.cpp |
| diff --git a/src/pdf/SkPDFBitmap.cpp b/src/pdf/SkPDFBitmap.cpp |
| index fdc33032a9c793d0ada23d4fdd6d5863599775b8..ed8ea40fb9858d425d5430a21958fd49487c7d02 100644 |
| --- a/src/pdf/SkPDFBitmap.cpp |
| +++ b/src/pdf/SkPDFBitmap.cpp |
| @@ -382,13 +382,15 @@ namespace { |
| // This SkPDFObject only outputs the alpha layer of the given bitmap. |
| class PDFAlphaBitmap final : public SkPDFObject { |
| public: |
| - PDFAlphaBitmap(const SkImage* image) : fImage(SkRef(image)) {} |
| + PDFAlphaBitmap(const SkImage* image) : fImage(SkRef(image)) { SkASSERT(image); } |
|
tomhudson
2016/03/18 13:59:38
You don't want to do the force-to-be-nonnull-by-pa
hal.canary
2016/03/18 21:18:07
We rarely ever refer to SkImage types by reference
|
| ~PDFAlphaBitmap() {} |
|
tomhudson
2016/03/18 13:59:38
Since the base class has virtual functions, do we
hal.canary
2016/03/18 21:18:07
it's a final class
tomhudson
2016/03/21 13:54:30
This assertion is not sufficient for me to evaluat
mtklein
2016/03/21 14:11:15
Marking a class final prevents subclassing and als
|
| void emitObject(SkWStream* stream, |
| const SkPDFObjNumMap& objNumMap, |
| const SkPDFSubstituteMap& subs) const override { |
| + SkASSERT(fImage); |
| emit_image_xobject(stream, fImage.get(), true, nullptr, objNumMap, subs); |
| } |
| + void dump() override { fImage = nullptr; } |
| private: |
| sk_sp<const SkImage> fImage; |
| @@ -404,22 +406,25 @@ public: |
| void emitObject(SkWStream* stream, |
| const SkPDFObjNumMap& objNumMap, |
| const SkPDFSubstituteMap& subs) const override { |
| + SkASSERT(fImage); |
| emit_image_xobject(stream, fImage.get(), false, fSMask, objNumMap, subs); |
| } |
| void addResources(SkPDFObjNumMap* catalog, |
| const SkPDFSubstituteMap& subs) const override { |
| + SkASSERT(fImage); |
| if (fSMask.get()) { |
| SkPDFObject* obj = subs.getSubstitute(fSMask.get()); |
| SkASSERT(obj); |
| catalog->addObjectRecursively(obj, subs); |
| } |
| } |
| + void dump() override { fImage = nullptr; fSMask = nullptr; } |
| PDFDefaultBitmap(const SkImage* image, SkPDFObject* smask) |
| - : fImage(SkRef(image)), fSMask(smask) {} |
| + : fImage(SkRef(image)), fSMask(smask) { SkASSERT(fImage); } |
|
tomhudson
2016/03/18 13:59:38
No destructor; do we need one since we've got virt
hal.canary
2016/03/18 21:18:07
it's a final class.
mtklein
2016/03/21 14:11:14
(No _explicit_ destructor. There is an implicitly
|
| private: |
| sk_sp<const SkImage> fImage; |
| - const sk_sp<SkPDFObject> fSMask; |
| + sk_sp<SkPDFObject> fSMask; |
| }; |
| } // namespace |
| @@ -437,15 +442,17 @@ public: |
| sk_sp<SkData> fData; |
| bool fIsYUV; |
| PDFJpegBitmap(SkISize size, SkData* data, bool isYUV) |
| - : fSize(size), fData(SkRef(data)), fIsYUV(isYUV) {} |
| + : fSize(size), fData(SkRef(data)), fIsYUV(isYUV) { SkASSERT(data); } |
| void emitObject(SkWStream*, |
| const SkPDFObjNumMap&, |
| const SkPDFSubstituteMap&) const override; |
| + void dump() override { fData = nullptr; } |
| }; |
| void PDFJpegBitmap::emitObject(SkWStream* stream, |
| const SkPDFObjNumMap& objNumMap, |
| const SkPDFSubstituteMap& substituteMap) const { |
| + SkASSERT(fData); |
| SkPDFDict pdfDict("XObject"); |
| pdfDict.insertName("Subtype", "Image"); |
| pdfDict.insertInt("Width", fSize.width()); |