1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef mozilla_image_ImageWrapper_h 7 #define mozilla_image_ImageWrapper_h 8 9 #include "mozilla/MemoryReporting.h" 10 #include "Image.h" 11 12 namespace mozilla { 13 namespace image { 14 15 /** 16 * Abstract superclass for Images that wrap other Images. 17 */ 18 class ImageWrapper : public Image { 19 public: 20 NS_DECL_ISUPPORTS 21 NS_DECL_IMGICONTAINER 22 23 // Inherited methods from Image. 24 nsresult GetNativeSizes(nsTArray<gfx::IntSize>& aNativeSizes) const override; 25 size_t GetNativeSizesLength() const override; 26 virtual already_AddRefed<ProgressTracker> GetProgressTracker() override; 27 28 virtual size_t SizeOfSourceWithComputedFallback( 29 SizeOfState& aState) const override; 30 virtual void CollectSizeOfSurfaces(nsTArray<SurfaceMemoryCounter>& aCounters, 31 MallocSizeOf aMallocSizeOf) const override; 32 33 virtual void IncrementAnimationConsumers() override; 34 virtual void DecrementAnimationConsumers() override; 35 #ifdef DEBUG 36 virtual uint32_t GetAnimationConsumers() override; 37 #endif 38 39 virtual nsresult OnImageDataAvailable(nsIRequest* aRequest, 40 nsIInputStream* aInStr, 41 uint64_t aSourceOffset, 42 uint32_t aCount) override; 43 virtual nsresult OnImageDataComplete(nsIRequest* aRequest, nsresult aStatus, 44 bool aLastPart) override; 45 46 virtual void OnSurfaceDiscarded(const SurfaceKey& aSurfaceKey) override; 47 48 virtual void SetInnerWindowID(uint64_t aInnerWindowId) override; 49 virtual uint64_t InnerWindowID() const override; 50 51 virtual bool HasError() override; 52 virtual void SetHasError() override; 53 54 nsIURI* GetURI() const override; 55 56 protected: ImageWrapper(Image * aInnerImage)57 explicit ImageWrapper(Image* aInnerImage) : mInnerImage(aInnerImage) { 58 MOZ_ASSERT(aInnerImage, "Need an image to wrap"); 59 } 60 ~ImageWrapper()61 virtual ~ImageWrapper() {} 62 63 /** 64 * Returns a weak reference to the inner image wrapped by this ImageWrapper. 65 */ InnerImage()66 Image* InnerImage() const { return mInnerImage.get(); } 67 SetInnerImage(Image * aInnerImage)68 void SetInnerImage(Image* aInnerImage) { 69 MOZ_ASSERT(aInnerImage, "Need an image to wrap"); 70 mInnerImage = aInnerImage; 71 } 72 73 private: 74 RefPtr<Image> mInnerImage; 75 }; 76 77 } // namespace image 78 } // namespace mozilla 79 80 #endif // mozilla_image_ImageWrapper_h 81