From 1465e09a99d5d231fa648c26a600bf63a89e56e3 Mon Sep 17 00:00:00 2001 From: Benoit Girard Date: Tue, 15 Jul 2014 11:37:45 -0400 Subject: [PATCH] Bug 1037691 - Fix instances where refcounted classes expose a public destructor. r=ehsan,bent,mayhemer,jrmuizel --- content/base/src/nsAttrValueInlines.h | 11 +++++++- content/base/src/nsDocument.cpp | 2 ++ content/media/AudioNodeExternalInputStream.h | 2 ++ content/media/AudioNodeStream.h | 3 +++ content/media/BufferMediaResource.h | 2 ++ content/media/FileBlockCache.h | 2 ++ content/media/MediaDataDecodedListener.h | 4 +++ content/media/MediaResource.cpp | 2 ++ .../media/mediasource/SourceBufferResource.h | 2 ++ content/media/ogg/OggReader.h | 3 +++ content/media/raw/RawReader.h | 3 +++ content/media/wave/WaveReader.h | 3 +++ content/media/webm/WebMReader.h | 3 +++ content/xul/templates/src/nsRuleNetwork.h | 5 ++++ dom/archivereader/ArchiveEvent.h | 2 ++ dom/archivereader/ArchiveRequest.cpp | 1 + dom/archivereader/ArchiveZipEvent.h | 2 ++ dom/asmjscache/AsmJSCache.cpp | 2 ++ dom/base/nsGlobalWindow.cpp | 4 ++- dom/camera/DOMCameraControlListener.cpp | 3 +++ dom/promise/Promise.cpp | 4 +++ dom/src/storage/DOMStorageCache.h | 3 +++ gfx/layers/CopyableCanvasLayer.h | 3 +++ gfx/layers/basic/BasicColorLayer.cpp | 3 +++ gfx/layers/basic/BasicCompositor.h | 3 ++- gfx/layers/basic/BasicContainerLayer.h | 2 ++ gfx/layers/basic/BasicImageLayer.cpp | 2 ++ gfx/layers/basic/BasicLayers.h | 3 +++ gfx/layers/basic/BasicLayersImpl.h | 3 +++ gfx/layers/basic/BasicThebesLayer.h | 3 +++ gfx/layers/client/ClientCanvasLayer.h | 3 +++ gfx/layers/client/ClientColorLayer.cpp | 3 +++ gfx/layers/client/ClientContainerLayer.h | 6 +++++ gfx/layers/client/ClientImageLayer.cpp | 4 ++- gfx/layers/client/ClientLayerManager.h | 3 +++ gfx/layers/client/ClientThebesLayer.h | 3 +++ gfx/layers/client/ClientTiledThebesLayer.h | 3 +++ gfx/layers/client/CompositableClient.h | 2 ++ gfx/layers/client/SimpleTiledContentClient.h | 3 +++ gfx/layers/client/TextureClient.h | 6 +++++ gfx/layers/client/TiledContentClient.h | 6 +++++ gfx/layers/composite/CanvasLayerComposite.h | 2 ++ gfx/layers/composite/ColorLayerComposite.h | 3 +++ .../composite/ContainerLayerComposite.h | 5 ++++ gfx/layers/composite/ImageLayerComposite.h | 2 ++ gfx/layers/composite/TextureHost.h | 8 ++++++ gfx/layers/composite/ThebesLayerComposite.h | 3 +++ gfx/layers/composite/TiledContentHost.h | 2 ++ gfx/layers/ipc/AsyncTransactionTracker.h | 2 ++ gfx/layers/ipc/LayerTransactionParent.h | 3 +++ gfx/layers/ipc/SharedPlanarYCbCrImage.h | 3 +++ gfx/layers/ipc/SharedRGBImage.h | 3 +++ gfx/layers/opengl/CompositorOGL.h | 2 ++ gfx/thebes/gfxBaseSharedMemorySurface.h | 3 ++- gfx/thebes/gfxReusableImageSurfaceWrapper.h | 2 ++ .../gfxReusableSharedImageSurfaceWrapper.h | 2 ++ ipc/glue/BackgroundChildImpl.cpp | 6 +++-- ipc/glue/BackgroundParentImpl.cpp | 6 +++-- layout/base/MaskLayerImageCache.cpp | 27 +++++++++++++++++++ layout/base/MaskLayerImageCache.h | 23 +++++----------- layout/forms/nsComboboxControlFrame.cpp | 3 +++ netwerk/cache2/CacheEntry.h | 6 +++-- netwerk/cache2/CacheFile.cpp | 4 +++ netwerk/cache2/CacheFileChunk.cpp | 2 ++ netwerk/cache2/CacheFileIOManager.cpp | 22 +++++++++++++++ .../protocol/ftp/nsFtpConnectionThread.cpp | 2 ++ parser/html/nsHtml5OwningUTF16Buffer.h | 2 ++ rdf/base/src/nsInMemoryDataSource.cpp | 6 +++-- widget/xpwidgets/nsBaseWidget.cpp | 6 ++--- 69 files changed, 259 insertions(+), 33 deletions(-) diff --git a/content/base/src/nsAttrValueInlines.h b/content/base/src/nsAttrValueInlines.h index 2f7462989fa1ca..8e399c9fc51b76 100644 --- a/content/base/src/nsAttrValueInlines.h +++ b/content/base/src/nsAttrValueInlines.h @@ -9,6 +9,16 @@ #include "nsAttrValue.h" +struct MiscContainer; + +namespace mozilla { +template<> +struct HasDangerousPublicDestructor +{ + static const bool value = true; +}; +} + struct MiscContainer { typedef nsAttrValue::ValueType ValueType; @@ -93,7 +103,6 @@ struct MiscContainer void Evict(); }; - /** * Implementation of inline methods */ diff --git a/content/base/src/nsDocument.cpp b/content/base/src/nsDocument.cpp index d6fdae511bdede..e6f94e125abfcd 100644 --- a/content/base/src/nsDocument.cpp +++ b/content/base/src/nsDocument.cpp @@ -1463,11 +1463,13 @@ class nsIDocument::SelectorCacheKeyDeleter MOZ_FINAL : public nsRunnable MOZ_COUNT_CTOR(SelectorCacheKeyDeleter); } +protected: ~SelectorCacheKeyDeleter() { MOZ_COUNT_DTOR(SelectorCacheKeyDeleter); } +public: NS_IMETHOD Run() { return NS_OK; diff --git a/content/media/AudioNodeExternalInputStream.h b/content/media/AudioNodeExternalInputStream.h index b5107abed589d9..135e8fa2281560 100644 --- a/content/media/AudioNodeExternalInputStream.h +++ b/content/media/AudioNodeExternalInputStream.h @@ -24,8 +24,10 @@ namespace mozilla { class AudioNodeExternalInputStream : public AudioNodeStream { public: AudioNodeExternalInputStream(AudioNodeEngine* aEngine, TrackRate aSampleRate); +protected: ~AudioNodeExternalInputStream(); +public: virtual void ProcessInput(GraphTime aFrom, GraphTime aTo, uint32_t aFlags) MOZ_OVERRIDE; private: diff --git a/content/media/AudioNodeStream.h b/content/media/AudioNodeStream.h index 6a02e1287e20bb..8afe0f6741d45c 100644 --- a/content/media/AudioNodeStream.h +++ b/content/media/AudioNodeStream.h @@ -65,8 +65,11 @@ class AudioNodeStream : public ProcessedMediaStream { mHasCurrentData = true; MOZ_COUNT_CTOR(AudioNodeStream); } + +protected: ~AudioNodeStream(); +public: // Control API /** * Sets a parameter that's a time relative to some stream's played time. diff --git a/content/media/BufferMediaResource.h b/content/media/BufferMediaResource.h index 316c123a16a1e1..a9927a0defe709 100644 --- a/content/media/BufferMediaResource.h +++ b/content/media/BufferMediaResource.h @@ -33,11 +33,13 @@ class BufferMediaResource : public MediaResource MOZ_COUNT_CTOR(BufferMediaResource); } +protected: virtual ~BufferMediaResource() { MOZ_COUNT_DTOR(BufferMediaResource); } +private: virtual nsresult Close() { return NS_OK; } virtual void Suspend(bool aCloseImmediately) {} virtual void Resume() {} diff --git a/content/media/FileBlockCache.h b/content/media/FileBlockCache.h index 57112c6c0629df..f0ada7c0a09ca8 100644 --- a/content/media/FileBlockCache.h +++ b/content/media/FileBlockCache.h @@ -56,8 +56,10 @@ class FileBlockCache : public nsRunnable { FileBlockCache(); +protected: ~FileBlockCache(); +public: // Assumes ownership of aFD. nsresult Open(PRFileDesc* aFD); diff --git a/content/media/MediaDataDecodedListener.h b/content/media/MediaDataDecodedListener.h index 6321a79188eb90..80fbc1942aa65b 100644 --- a/content/media/MediaDataDecodedListener.h +++ b/content/media/MediaDataDecodedListener.h @@ -104,10 +104,12 @@ class MediaDataDecodedListener : public RequestSampleCallback { { MOZ_COUNT_CTOR(DeliverAudioTask); } + protected: ~DeliverAudioTask() { MOZ_COUNT_DTOR(DeliverAudioTask); } + public: NS_METHOD Run() { mTarget->OnAudioDecoded(mSample.forget()); return NS_OK; @@ -125,10 +127,12 @@ class MediaDataDecodedListener : public RequestSampleCallback { { MOZ_COUNT_CTOR(DeliverVideoTask); } + protected: ~DeliverVideoTask() { MOZ_COUNT_DTOR(DeliverVideoTask); } + public: NS_METHOD Run() { mTarget->OnVideoDecoded(mSample.forget()); return NS_OK; diff --git a/content/media/MediaResource.cpp b/content/media/MediaResource.cpp index 5dd38b064501a2..9ad6c805fc74b4 100644 --- a/content/media/MediaResource.cpp +++ b/content/media/MediaResource.cpp @@ -1639,11 +1639,13 @@ class DispatchBytesConsumedEvent : public nsRunnable { MOZ_COUNT_CTOR(DispatchBytesConsumedEvent); } +protected: ~DispatchBytesConsumedEvent() { MOZ_COUNT_DTOR(DispatchBytesConsumedEvent); } +public: NS_IMETHOD Run() { mDecoder->NotifyBytesConsumed(mNumBytes, mOffset); // Drop ref to decoder on main thread, just in case this reference diff --git a/content/media/mediasource/SourceBufferResource.h b/content/media/mediasource/SourceBufferResource.h index ee444f6247c12c..2850e0785129d7 100644 --- a/content/media/mediasource/SourceBufferResource.h +++ b/content/media/mediasource/SourceBufferResource.h @@ -192,8 +192,10 @@ class SourceBufferResource MOZ_FINAL : public MediaResource public: SourceBufferResource(nsIPrincipal* aPrincipal, const nsACString& aType); +protected: ~SourceBufferResource(); +public: virtual nsresult Close() MOZ_OVERRIDE; virtual void Suspend(bool aCloseImmediately) MOZ_OVERRIDE {} virtual void Resume() MOZ_OVERRIDE {} diff --git a/content/media/ogg/OggReader.h b/content/media/ogg/OggReader.h index d97f0325f405cd..4a7c517890104a 100644 --- a/content/media/ogg/OggReader.h +++ b/content/media/ogg/OggReader.h @@ -49,8 +49,11 @@ class OggReader : public MediaDecoderReader { public: OggReader(AbstractMediaDecoder* aDecoder); + +protected: ~OggReader(); +public: virtual nsresult Init(MediaDecoderReader* aCloneDonor); virtual nsresult ResetDecode(); virtual bool DecodeAudioData(); diff --git a/content/media/raw/RawReader.h b/content/media/raw/RawReader.h index 68059730b5b4bf..389dc143a92008 100644 --- a/content/media/raw/RawReader.h +++ b/content/media/raw/RawReader.h @@ -15,8 +15,11 @@ class RawReader : public MediaDecoderReader { public: RawReader(AbstractMediaDecoder* aDecoder); + +protected: ~RawReader(); +public: virtual nsresult Init(MediaDecoderReader* aCloneDonor); virtual nsresult ResetDecode(); virtual bool DecodeAudioData(); diff --git a/content/media/wave/WaveReader.h b/content/media/wave/WaveReader.h index 2a6c30bbc55202..275de717205e85 100644 --- a/content/media/wave/WaveReader.h +++ b/content/media/wave/WaveReader.h @@ -21,8 +21,11 @@ class WaveReader : public MediaDecoderReader { public: WaveReader(AbstractMediaDecoder* aDecoder); + +protected: ~WaveReader(); +public: virtual nsresult Init(MediaDecoderReader* aCloneDonor); virtual bool DecodeAudioData(); virtual bool DecodeVideoFrame(bool &aKeyframeSkip, diff --git a/content/media/webm/WebMReader.h b/content/media/webm/WebMReader.h index 6dfebab4bb9d23..a2ad9368bc02d6 100644 --- a/content/media/webm/WebMReader.h +++ b/content/media/webm/WebMReader.h @@ -105,8 +105,11 @@ class WebMReader : public MediaDecoderReader { public: WebMReader(AbstractMediaDecoder* aDecoder); + +protected: ~WebMReader(); +public: virtual nsresult Init(MediaDecoderReader* aCloneDonor); virtual nsresult ResetDecode(); virtual bool DecodeAudioData(); diff --git a/content/xul/templates/src/nsRuleNetwork.h b/content/xul/templates/src/nsRuleNetwork.h index 80d804b3af3b04..ddc4724de20a0c 100644 --- a/content/xul/templates/src/nsRuleNetwork.h +++ b/content/xul/templates/src/nsRuleNetwork.h @@ -86,11 +86,13 @@ class MemoryElementSet { public: List() { MOZ_COUNT_CTOR(MemoryElementSet::List); } + protected: ~List() { MOZ_COUNT_DTOR(MemoryElementSet::List); delete mElement; NS_IF_RELEASE(mNext); } + public: int32_t AddRef() { return ++mRefCnt; } int32_t Release() { @@ -231,10 +233,13 @@ class nsAssignmentSet { List(const nsAssignment &aAssignment) : mAssignment(aAssignment) { MOZ_COUNT_CTOR(nsAssignmentSet::List); } + protected: ~List() { MOZ_COUNT_DTOR(nsAssignmentSet::List); NS_IF_RELEASE(mNext); } + public: + int32_t AddRef() { return ++mRefCnt; } int32_t Release() { diff --git a/dom/archivereader/ArchiveEvent.h b/dom/archivereader/ArchiveEvent.h index ace6627e41ad30..392d5fa5885f75 100644 --- a/dom/archivereader/ArchiveEvent.h +++ b/dom/archivereader/ArchiveEvent.h @@ -56,8 +56,10 @@ class ArchiveReaderEvent : public nsRunnable ArchiveReaderEvent(ArchiveReader* aArchiveReader); +protected: virtual ~ArchiveReaderEvent(); +public: // This must be implemented virtual nsresult Exec() = 0; diff --git a/dom/archivereader/ArchiveRequest.cpp b/dom/archivereader/ArchiveRequest.cpp index 9047110abe9df0..3c68c1720b7041 100644 --- a/dom/archivereader/ArchiveRequest.cpp +++ b/dom/archivereader/ArchiveRequest.cpp @@ -29,6 +29,7 @@ class ArchiveRequestEvent : public nsRunnable MOZ_COUNT_CTOR(ArchiveRequestEvent); } +protected: ~ArchiveRequestEvent() { MOZ_COUNT_DTOR(ArchiveRequestEvent); diff --git a/dom/archivereader/ArchiveZipEvent.h b/dom/archivereader/ArchiveZipEvent.h index 76e4d891cff5e2..35b756a365a7e1 100644 --- a/dom/archivereader/ArchiveZipEvent.h +++ b/dom/archivereader/ArchiveZipEvent.h @@ -24,8 +24,10 @@ class ArchiveZipItem : public ArchiveItem ArchiveZipItem(const char* aFilename, const ZipCentral& aCentralStruct, const nsACString& aEncoding); +protected: virtual ~ArchiveZipItem(); +public: nsresult GetFilename(nsString& aFilename) MOZ_OVERRIDE; // From zipItem to DOMFile: diff --git a/dom/asmjscache/AsmJSCache.cpp b/dom/asmjscache/AsmJSCache.cpp index 734e95826991ba..325a9ab2b819bb 100644 --- a/dom/asmjscache/AsmJSCache.cpp +++ b/dom/asmjscache/AsmJSCache.cpp @@ -1116,6 +1116,7 @@ class SingleProcessRunnable MOZ_FINAL : public File, MOZ_COUNT_CTOR(SingleProcessRunnable); } +protected: ~SingleProcessRunnable() { MOZ_COUNT_DTOR(SingleProcessRunnable); @@ -1370,6 +1371,7 @@ class ChildProcessRunnable MOZ_FINAL : public File, MOZ_COUNT_CTOR(ChildProcessRunnable); } +protected: ~ChildProcessRunnable() { MOZ_ASSERT(mState == eFinished); diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp index f12f6c2fa4ebc3..058a4552a7b80d 100644 --- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -7839,12 +7839,14 @@ class PostMessageEvent : public nsRunnable { MOZ_COUNT_CTOR(PostMessageEvent); } - + +protected: ~PostMessageEvent() { MOZ_COUNT_DTOR(PostMessageEvent); } +public: JSAutoStructuredCloneBuffer& Buffer() { return mBuffer; diff --git a/dom/camera/DOMCameraControlListener.cpp b/dom/camera/DOMCameraControlListener.cpp index c4f74d61062de5..78a7888b378ae2 100644 --- a/dom/camera/DOMCameraControlListener.cpp +++ b/dom/camera/DOMCameraControlListener.cpp @@ -36,11 +36,14 @@ class DOMCameraControlListener::DOMCallback : public nsRunnable { MOZ_COUNT_CTOR(DOMCameraControlListener::DOMCallback); } + +protected: virtual ~DOMCallback() { MOZ_COUNT_DTOR(DOMCameraControlListener::DOMCallback); } +public: virtual void RunCallback(nsDOMCameraControl* aDOMCameraControl) = 0; NS_IMETHOD diff --git a/dom/promise/Promise.cpp b/dom/promise/Promise.cpp index b40935bd72621e..056ac761c4d7bf 100644 --- a/dom/promise/Promise.cpp +++ b/dom/promise/Promise.cpp @@ -43,11 +43,13 @@ class PromiseTask MOZ_FINAL : public nsRunnable MOZ_COUNT_CTOR(PromiseTask); } +protected: ~PromiseTask() { MOZ_COUNT_DTOR(PromiseTask); } +public: NS_IMETHOD Run() { mPromise->mTaskPending = false; @@ -70,11 +72,13 @@ class WorkerPromiseTask MOZ_FINAL : public WorkerSameThreadRunnable MOZ_COUNT_CTOR(WorkerPromiseTask); } +protected: ~WorkerPromiseTask() { MOZ_COUNT_DTOR(WorkerPromiseTask); } +public: bool WorkerRun(JSContext* aCx, WorkerPrivate* aWorkerPrivate) { diff --git a/dom/src/storage/DOMStorageCache.h b/dom/src/storage/DOMStorageCache.h index 26f5e629707f18..30c124ae5edfc0 100644 --- a/dom/src/storage/DOMStorageCache.h +++ b/dom/src/storage/DOMStorageCache.h @@ -70,8 +70,11 @@ class DOMStorageCache : public DOMStorageCacheBridge NS_IMETHOD_(void) Release(void); DOMStorageCache(const nsACString* aScope); + +protected: virtual ~DOMStorageCache(); +public: void Init(DOMStorageManager* aManager, bool aPersistent, nsIPrincipal* aPrincipal, const nsACString& aQuotaScope); diff --git a/gfx/layers/CopyableCanvasLayer.h b/gfx/layers/CopyableCanvasLayer.h index 15a117478e0df6..4f61d43dbf1111 100644 --- a/gfx/layers/CopyableCanvasLayer.h +++ b/gfx/layers/CopyableCanvasLayer.h @@ -37,8 +37,11 @@ class CopyableCanvasLayer : public CanvasLayer { public: CopyableCanvasLayer(LayerManager* aLayerManager, void *aImplData); + +protected: virtual ~CopyableCanvasLayer(); +public: virtual void Initialize(const Data& aData); virtual bool IsDataValid(const Data& aData); diff --git a/gfx/layers/basic/BasicColorLayer.cpp b/gfx/layers/basic/BasicColorLayer.cpp index 17e9e8c5b5cec3..d5633efd717d7a 100644 --- a/gfx/layers/basic/BasicColorLayer.cpp +++ b/gfx/layers/basic/BasicColorLayer.cpp @@ -32,11 +32,14 @@ class BasicColorLayer : public ColorLayer, public BasicImplData { { MOZ_COUNT_CTOR(BasicColorLayer); } + +protected: virtual ~BasicColorLayer() { MOZ_COUNT_DTOR(BasicColorLayer); } +public: virtual void SetVisibleRegion(const nsIntRegion& aRegion) { NS_ASSERTION(BasicManager()->InConstruction(), diff --git a/gfx/layers/basic/BasicCompositor.h b/gfx/layers/basic/BasicCompositor.h index 31126d79b85796..0c0c5ef253428f 100644 --- a/gfx/layers/basic/BasicCompositor.h +++ b/gfx/layers/basic/BasicCompositor.h @@ -42,9 +42,10 @@ class BasicCompositor : public Compositor public: BasicCompositor(nsIWidget *aWidget); +protected: virtual ~BasicCompositor(); - +public: virtual bool Initialize() MOZ_OVERRIDE { return true; }; virtual void Destroy() MOZ_OVERRIDE; diff --git a/gfx/layers/basic/BasicContainerLayer.h b/gfx/layers/basic/BasicContainerLayer.h index e951e51ce2c417..f18d635dc3638c 100644 --- a/gfx/layers/basic/BasicContainerLayer.h +++ b/gfx/layers/basic/BasicContainerLayer.h @@ -26,8 +26,10 @@ class BasicContainerLayer : public ContainerLayer, public BasicImplData { MOZ_COUNT_CTOR(BasicContainerLayer); mSupportsComponentAlphaChildren = true; } +protected: virtual ~BasicContainerLayer(); +public: virtual void SetVisibleRegion(const nsIntRegion& aRegion) { NS_ASSERTION(BasicManager()->InConstruction(), diff --git a/gfx/layers/basic/BasicImageLayer.cpp b/gfx/layers/basic/BasicImageLayer.cpp index 59e8458e50b172..32220b35a105d3 100644 --- a/gfx/layers/basic/BasicImageLayer.cpp +++ b/gfx/layers/basic/BasicImageLayer.cpp @@ -32,11 +32,13 @@ class BasicImageLayer : public ImageLayer, public BasicImplData { { MOZ_COUNT_CTOR(BasicImageLayer); } +protected: virtual ~BasicImageLayer() { MOZ_COUNT_DTOR(BasicImageLayer); } +public: virtual void SetVisibleRegion(const nsIntRegion& aRegion) { NS_ASSERTION(BasicManager()->InConstruction(), diff --git a/gfx/layers/basic/BasicLayers.h b/gfx/layers/basic/BasicLayers.h index 2ddd15bcbb6b96..c93f35998061a8 100644 --- a/gfx/layers/basic/BasicLayers.h +++ b/gfx/layers/basic/BasicLayers.h @@ -73,8 +73,11 @@ class BasicLayerManager : * ClearWidget before the widget dies. */ BasicLayerManager(nsIWidget* aWidget); + +protected: virtual ~BasicLayerManager(); +public: /** * Set the default target context that will be used when BeginTransaction * is called. This can only be called outside a transaction. diff --git a/gfx/layers/basic/BasicLayersImpl.h b/gfx/layers/basic/BasicLayersImpl.h index a0d7bedd3b9175..2fba7224f73816 100644 --- a/gfx/layers/basic/BasicLayersImpl.h +++ b/gfx/layers/basic/BasicLayersImpl.h @@ -55,11 +55,14 @@ class BasicReadbackLayer : public ReadbackLayer, { MOZ_COUNT_CTOR(BasicReadbackLayer); } + +protected: virtual ~BasicReadbackLayer() { MOZ_COUNT_DTOR(BasicReadbackLayer); } +public: virtual void SetVisibleRegion(const nsIntRegion& aRegion) { NS_ASSERTION(BasicManager()->InConstruction(), diff --git a/gfx/layers/basic/BasicThebesLayer.h b/gfx/layers/basic/BasicThebesLayer.h index 5af62dc67c7756..0a2b0a0b85ec63 100644 --- a/gfx/layers/basic/BasicThebesLayer.h +++ b/gfx/layers/basic/BasicThebesLayer.h @@ -37,11 +37,14 @@ class BasicThebesLayer : public ThebesLayer, public BasicImplData { { MOZ_COUNT_CTOR(BasicThebesLayer); } + +protected: virtual ~BasicThebesLayer() { MOZ_COUNT_DTOR(BasicThebesLayer); } +public: virtual void SetVisibleRegion(const nsIntRegion& aRegion) { NS_ASSERTION(BasicManager()->InConstruction(), diff --git a/gfx/layers/client/ClientCanvasLayer.h b/gfx/layers/client/ClientCanvasLayer.h index b9f9d86818e947..70a84051bcd109 100644 --- a/gfx/layers/client/ClientCanvasLayer.h +++ b/gfx/layers/client/ClientCanvasLayer.h @@ -44,8 +44,11 @@ class ClientCanvasLayer : public CopyableCanvasLayer, { MOZ_COUNT_CTOR(ClientCanvasLayer); } + +protected: virtual ~ClientCanvasLayer(); +public: virtual void SetVisibleRegion(const nsIntRegion& aRegion) { NS_ASSERTION(ClientManager()->InConstruction(), diff --git a/gfx/layers/client/ClientColorLayer.cpp b/gfx/layers/client/ClientColorLayer.cpp index c652bf09adc3e2..1b49c07f212980 100644 --- a/gfx/layers/client/ClientColorLayer.cpp +++ b/gfx/layers/client/ClientColorLayer.cpp @@ -27,11 +27,14 @@ class ClientColorLayer : public ColorLayer, { MOZ_COUNT_CTOR(ClientColorLayer); } + +protected: virtual ~ClientColorLayer() { MOZ_COUNT_DTOR(ClientColorLayer); } +public: virtual void SetVisibleRegion(const nsIntRegion& aRegion) { NS_ASSERTION(ClientManager()->InConstruction(), diff --git a/gfx/layers/client/ClientContainerLayer.h b/gfx/layers/client/ClientContainerLayer.h index 926adac85ca4bf..537fd54618c97e 100644 --- a/gfx/layers/client/ClientContainerLayer.h +++ b/gfx/layers/client/ClientContainerLayer.h @@ -32,6 +32,8 @@ class ClientContainerLayer : public ContainerLayer, MOZ_COUNT_CTOR(ClientContainerLayer); mSupportsComponentAlphaChildren = true; } + +protected: virtual ~ClientContainerLayer() { while (mFirstChild) { @@ -41,6 +43,7 @@ class ClientContainerLayer : public ContainerLayer, MOZ_COUNT_DTOR(ClientContainerLayer); } +public: virtual void RenderLayer() { if (GetMaskLayer()) { @@ -148,11 +151,14 @@ class ClientRefLayer : public RefLayer, { MOZ_COUNT_CTOR(ClientRefLayer); } + +protected: virtual ~ClientRefLayer() { MOZ_COUNT_DTOR(ClientRefLayer); } +public: virtual Layer* AsLayer() { return this; } virtual ShadowableLayer* AsShadowableLayer() { return this; } diff --git a/gfx/layers/client/ClientImageLayer.cpp b/gfx/layers/client/ClientImageLayer.cpp index d3a9434afa9bd2..e016ba5211340d 100644 --- a/gfx/layers/client/ClientImageLayer.cpp +++ b/gfx/layers/client/ClientImageLayer.cpp @@ -33,12 +33,14 @@ class ClientImageLayer : public ImageLayer, { MOZ_COUNT_CTOR(ClientImageLayer); } + +protected: virtual ~ClientImageLayer() { DestroyBackBuffer(); MOZ_COUNT_DTOR(ClientImageLayer); } - + virtual void SetContainer(ImageContainer* aContainer) MOZ_OVERRIDE { ImageLayer::SetContainer(aContainer); diff --git a/gfx/layers/client/ClientLayerManager.h b/gfx/layers/client/ClientLayerManager.h index edf19a98ceeaac..b63ea396f65479 100644 --- a/gfx/layers/client/ClientLayerManager.h +++ b/gfx/layers/client/ClientLayerManager.h @@ -44,8 +44,11 @@ class ClientLayerManager : public LayerManager public: ClientLayerManager(nsIWidget* aWidget); + +protected: virtual ~ClientLayerManager(); +public: virtual ShadowLayerForwarder* AsShadowForwarder() { return mForwarder; diff --git a/gfx/layers/client/ClientThebesLayer.h b/gfx/layers/client/ClientThebesLayer.h index 01f8c61e5c8bfe..93472155c44570 100644 --- a/gfx/layers/client/ClientThebesLayer.h +++ b/gfx/layers/client/ClientThebesLayer.h @@ -42,6 +42,8 @@ class ClientThebesLayer : public ThebesLayer, { MOZ_COUNT_CTOR(ClientThebesLayer); } + +protected: virtual ~ClientThebesLayer() { if (mContentClient) { @@ -51,6 +53,7 @@ class ClientThebesLayer : public ThebesLayer, MOZ_COUNT_DTOR(ClientThebesLayer); } +public: virtual void SetVisibleRegion(const nsIntRegion& aRegion) { NS_ASSERTION(ClientManager()->InConstruction(), diff --git a/gfx/layers/client/ClientTiledThebesLayer.h b/gfx/layers/client/ClientTiledThebesLayer.h index 39f0f6f75a6e10..0582c982e8a651 100644 --- a/gfx/layers/client/ClientTiledThebesLayer.h +++ b/gfx/layers/client/ClientTiledThebesLayer.h @@ -43,8 +43,11 @@ class ClientTiledThebesLayer : public ThebesLayer, public: ClientTiledThebesLayer(ClientLayerManager* const aManager, ClientLayerManager::ThebesLayerCreationHint aCreationHint = LayerManager::NONE); + +protected: ~ClientTiledThebesLayer(); +public: // Override name to distinguish it from ClientThebesLayer in layer dumps virtual const char* Name() const { return "TiledThebesLayer"; } diff --git a/gfx/layers/client/CompositableClient.h b/gfx/layers/client/CompositableClient.h index 883b18dd8a9b3e..9d425abf2e5a45 100644 --- a/gfx/layers/client/CompositableClient.h +++ b/gfx/layers/client/CompositableClient.h @@ -39,12 +39,14 @@ class RemoveTextureFromCompositableTracker : public AsyncTransactionTracker { MOZ_COUNT_CTOR(RemoveTextureFromCompositableTracker); } +protected: ~RemoveTextureFromCompositableTracker() { MOZ_COUNT_DTOR(RemoveTextureFromCompositableTracker); ReleaseTextureClient(); } +public: virtual void Complete() MOZ_OVERRIDE { ReleaseTextureClient(); diff --git a/gfx/layers/client/SimpleTiledContentClient.h b/gfx/layers/client/SimpleTiledContentClient.h index 8c200e2f47c3ce..ccf36d1bd7e494 100644 --- a/gfx/layers/client/SimpleTiledContentClient.h +++ b/gfx/layers/client/SimpleTiledContentClient.h @@ -140,6 +140,7 @@ class SimpleTiledContentClient : public CompositableClient SimpleTiledContentClient(SimpleClientTiledThebesLayer* aThebesLayer, ClientLayerManager* aManager); +private: ~SimpleTiledContentClient(); virtual TextureInfo GetTextureInfo() const MOZ_OVERRIDE @@ -161,8 +162,10 @@ class SimpleClientTiledThebesLayer : public ThebesLayer, public: SimpleClientTiledThebesLayer(ClientLayerManager* const aManager, ClientLayerManager::ThebesLayerCreationHint aCreationHint = LayerManager::NONE); +protected: ~SimpleClientTiledThebesLayer(); +public: // Thebes Layer virtual Layer* AsLayer() { return this; } virtual void InvalidateRegion(const nsIntRegion& aRegion) { diff --git a/gfx/layers/client/TextureClient.h b/gfx/layers/client/TextureClient.h index 7c338ab241d209..de9bd056f65494 100644 --- a/gfx/layers/client/TextureClient.h +++ b/gfx/layers/client/TextureClient.h @@ -500,8 +500,10 @@ class ShmemTextureClient : public BufferTextureClient ShmemTextureClient(ISurfaceAllocator* aAllocator, gfx::SurfaceFormat aFormat, gfx::BackendType aBackend, TextureFlags aFlags); +protected: ~ShmemTextureClient(); +public: virtual bool ToSurfaceDescriptor(SurfaceDescriptor& aDescriptor) MOZ_OVERRIDE; virtual bool Allocate(uint32_t aSize) MOZ_OVERRIDE; @@ -532,8 +534,10 @@ class MemoryTextureClient : public BufferTextureClient MemoryTextureClient(ISurfaceAllocator* aAllocator, gfx::SurfaceFormat aFormat, gfx::BackendType aBackend, TextureFlags aFlags); +protected: ~MemoryTextureClient(); +public: virtual bool ToSurfaceDescriptor(SurfaceDescriptor& aDescriptor) MOZ_OVERRIDE; virtual bool Allocate(uint32_t aSize) MOZ_OVERRIDE; @@ -559,8 +563,10 @@ class StreamTextureClient : public TextureClient public: StreamTextureClient(TextureFlags aFlags); +protected: ~StreamTextureClient(); +public: virtual bool IsAllocated() const MOZ_OVERRIDE; virtual bool Lock(OpenMode mode) MOZ_OVERRIDE; diff --git a/gfx/layers/client/TiledContentClient.h b/gfx/layers/client/TiledContentClient.h index 77d6135b431fd9..d73461c8c894a3 100644 --- a/gfx/layers/client/TiledContentClient.h +++ b/gfx/layers/client/TiledContentClient.h @@ -72,8 +72,10 @@ class gfxMemorySharedReadLock : public gfxSharedReadLock { public: gfxMemorySharedReadLock(); +protected: ~gfxMemorySharedReadLock(); +public: virtual int32_t ReadLock() MOZ_OVERRIDE; virtual int32_t ReadUnlock() MOZ_OVERRIDE; @@ -97,8 +99,10 @@ class gfxShmSharedReadLock : public gfxSharedReadLock { public: gfxShmSharedReadLock(ISurfaceAllocator* aAllocator); +protected: ~gfxShmSharedReadLock(); +public: virtual int32_t ReadLock() MOZ_OVERRIDE; virtual int32_t ReadUnlock() MOZ_OVERRIDE; @@ -465,6 +469,7 @@ class TiledContentClient : public CompositableClient TiledContentClient(ClientTiledThebesLayer* aThebesLayer, ClientLayerManager* aManager); +protected: ~TiledContentClient() { MOZ_COUNT_DTOR(TiledContentClient); @@ -473,6 +478,7 @@ class TiledContentClient : public CompositableClient mLowPrecisionTiledBuffer.Release(); } +public: virtual TextureInfo GetTextureInfo() const MOZ_OVERRIDE { return TextureInfo(CompositableType::BUFFER_TILED); diff --git a/gfx/layers/composite/CanvasLayerComposite.h b/gfx/layers/composite/CanvasLayerComposite.h index 4bd5bc6e01c3fc..70f54fa223d464 100644 --- a/gfx/layers/composite/CanvasLayerComposite.h +++ b/gfx/layers/composite/CanvasLayerComposite.h @@ -30,8 +30,10 @@ class CanvasLayerComposite : public CanvasLayer, public: CanvasLayerComposite(LayerManagerComposite* aManager); +protected: virtual ~CanvasLayerComposite(); +public: // CanvasLayer impl virtual void Initialize(const Data& aData) MOZ_OVERRIDE { diff --git a/gfx/layers/composite/ColorLayerComposite.h b/gfx/layers/composite/ColorLayerComposite.h index 7dc39260dbfb2f..31ec0459d70908 100644 --- a/gfx/layers/composite/ColorLayerComposite.h +++ b/gfx/layers/composite/ColorLayerComposite.h @@ -30,12 +30,15 @@ class ColorLayerComposite : public ColorLayer, MOZ_COUNT_CTOR(ColorLayerComposite); mImplData = static_cast(this); } + +protected: ~ColorLayerComposite() { MOZ_COUNT_DTOR(ColorLayerComposite); Destroy(); } +public: // LayerComposite Implementation virtual Layer* GetLayer() MOZ_OVERRIDE { return this; } diff --git a/gfx/layers/composite/ContainerLayerComposite.h b/gfx/layers/composite/ContainerLayerComposite.h index cd1503f64e9fda..cb2ac49ea4abf8 100644 --- a/gfx/layers/composite/ContainerLayerComposite.h +++ b/gfx/layers/composite/ContainerLayerComposite.h @@ -28,8 +28,10 @@ class ContainerLayerComposite : public ContainerLayer, public: ContainerLayerComposite(LayerManagerComposite *aManager); +protected: ~ContainerLayerComposite(); +public: // LayerComposite Implementation virtual Layer* GetLayer() MOZ_OVERRIDE { return this; } @@ -63,8 +65,11 @@ class RefLayerComposite : public RefLayer, const nsIntRect& aClipRect); public: RefLayerComposite(LayerManagerComposite *aManager); + +protected: ~RefLayerComposite(); +public: /** LayerOGL implementation */ Layer* GetLayer() MOZ_OVERRIDE { return this; } diff --git a/gfx/layers/composite/ImageLayerComposite.h b/gfx/layers/composite/ImageLayerComposite.h index 216f224dd219a7..50dd30a12b31b1 100644 --- a/gfx/layers/composite/ImageLayerComposite.h +++ b/gfx/layers/composite/ImageLayerComposite.h @@ -33,8 +33,10 @@ class ImageLayerComposite : public ImageLayer, public: ImageLayerComposite(LayerManagerComposite* aManager); +protected: virtual ~ImageLayerComposite(); +public: virtual LayerRenderState GetRenderState() MOZ_OVERRIDE; virtual void Disconnect() MOZ_OVERRIDE; diff --git a/gfx/layers/composite/TextureHost.h b/gfx/layers/composite/TextureHost.h index 846ccc4dc7e865..9c091af578cc43 100644 --- a/gfx/layers/composite/TextureHost.h +++ b/gfx/layers/composite/TextureHost.h @@ -148,11 +148,13 @@ class NewTextureSource : public TextureSource { MOZ_COUNT_CTOR(NewTextureSource); } +protected: virtual ~NewTextureSource() { MOZ_COUNT_DTOR(NewTextureSource); } +public: /** * Should be overridden in order to deallocate the data that is associated * with the rendering backend, such as GL textures. @@ -285,8 +287,10 @@ class TextureHost public: TextureHost(TextureFlags aFlags); +protected: virtual ~TextureHost(); +public: /** * Factory method. */ @@ -548,8 +552,10 @@ class ShmemTextureHost : public BufferTextureHost ISurfaceAllocator* aDeallocator, TextureFlags aFlags); +protected: ~ShmemTextureHost(); +public: virtual void DeallocateSharedData() MOZ_OVERRIDE; virtual void ForgetSharedData() MOZ_OVERRIDE; @@ -580,8 +586,10 @@ class MemoryTextureHost : public BufferTextureHost gfx::SurfaceFormat aFormat, TextureFlags aFlags); +protected: ~MemoryTextureHost(); +public: virtual void DeallocateSharedData() MOZ_OVERRIDE; virtual void ForgetSharedData() MOZ_OVERRIDE; diff --git a/gfx/layers/composite/ThebesLayerComposite.h b/gfx/layers/composite/ThebesLayerComposite.h index 13f468500bbca7..49fbc39942222d 100644 --- a/gfx/layers/composite/ThebesLayerComposite.h +++ b/gfx/layers/composite/ThebesLayerComposite.h @@ -38,8 +38,11 @@ class ThebesLayerComposite : public ThebesLayer, { public: ThebesLayerComposite(LayerManagerComposite *aManager); + +protected: virtual ~ThebesLayerComposite(); +public: virtual void Disconnect() MOZ_OVERRIDE; virtual LayerRenderState GetRenderState() MOZ_OVERRIDE; diff --git a/gfx/layers/composite/TiledContentHost.h b/gfx/layers/composite/TiledContentHost.h index 1f98c3784e121a..7ae497ca0207f5 100644 --- a/gfx/layers/composite/TiledContentHost.h +++ b/gfx/layers/composite/TiledContentHost.h @@ -186,8 +186,10 @@ class TiledContentHost : public ContentHost, public: TiledContentHost(const TextureInfo& aTextureInfo); +protected: ~TiledContentHost(); +public: virtual LayerRenderState GetRenderState() MOZ_OVERRIDE { return LayerRenderState(); diff --git a/gfx/layers/ipc/AsyncTransactionTracker.h b/gfx/layers/ipc/AsyncTransactionTracker.h index 62991a3dae2ff9..5fb6cd6eebd006 100644 --- a/gfx/layers/ipc/AsyncTransactionTracker.h +++ b/gfx/layers/ipc/AsyncTransactionTracker.h @@ -196,11 +196,13 @@ class FenceDeliveryTracker : public AsyncTransactionTracker { MOZ_COUNT_CTOR(FenceDeliveryTracker); } +protected: ~FenceDeliveryTracker() { MOZ_COUNT_DTOR(FenceDeliveryTracker); } +public: virtual void Complete() MOZ_OVERRIDE { mFenceHandle = FenceHandle(); diff --git a/gfx/layers/ipc/LayerTransactionParent.h b/gfx/layers/ipc/LayerTransactionParent.h index c9329bd91207c3..4f891be9f3099d 100644 --- a/gfx/layers/ipc/LayerTransactionParent.h +++ b/gfx/layers/ipc/LayerTransactionParent.h @@ -50,8 +50,11 @@ class LayerTransactionParent : public PLayerTransactionParent, ShadowLayersManager* aLayersManager, uint64_t aId, ProcessId aOtherProcess); + +protected: ~LayerTransactionParent(); +public: void Destroy(); LayerManagerComposite* layer_manager() const { return mLayerManager; } diff --git a/gfx/layers/ipc/SharedPlanarYCbCrImage.h b/gfx/layers/ipc/SharedPlanarYCbCrImage.h index 0ea1c6653d963a..23f03a3a414781 100644 --- a/gfx/layers/ipc/SharedPlanarYCbCrImage.h +++ b/gfx/layers/ipc/SharedPlanarYCbCrImage.h @@ -29,8 +29,11 @@ class SharedPlanarYCbCrImage : public PlanarYCbCrImage { public: SharedPlanarYCbCrImage(ImageClient* aCompositable); + +protected: ~SharedPlanarYCbCrImage(); +public: virtual ISharedImage* AsSharedImage() MOZ_OVERRIDE { return this; } virtual TextureClient* GetTextureClient(CompositableClient* aClient) MOZ_OVERRIDE; virtual uint8_t* GetBuffer() MOZ_OVERRIDE; diff --git a/gfx/layers/ipc/SharedRGBImage.h b/gfx/layers/ipc/SharedRGBImage.h index 3965f063b99db0..69a91938922021 100644 --- a/gfx/layers/ipc/SharedRGBImage.h +++ b/gfx/layers/ipc/SharedRGBImage.h @@ -41,8 +41,11 @@ class SharedRGBImage : public Image { public: SharedRGBImage(ImageClient* aCompositable); + +protected: ~SharedRGBImage(); +public: virtual ISharedImage* AsSharedImage() MOZ_OVERRIDE { return this; } virtual TextureClient* GetTextureClient(CompositableClient* aClient) MOZ_OVERRIDE; diff --git a/gfx/layers/opengl/CompositorOGL.h b/gfx/layers/opengl/CompositorOGL.h index 9a0ecf419005fa..35d1c882e4c453 100644 --- a/gfx/layers/opengl/CompositorOGL.h +++ b/gfx/layers/opengl/CompositorOGL.h @@ -166,8 +166,10 @@ class CompositorOGL MOZ_FINAL : public Compositor CompositorOGL(nsIWidget *aWidget, int aSurfaceWidth = -1, int aSurfaceHeight = -1, bool aUseExternalSurfaceSize = false); +protected: virtual ~CompositorOGL(); +public: virtual TemporaryRef CreateDataTextureSource(TextureFlags aFlags = TextureFlags::NO_FLAGS) MOZ_OVERRIDE; diff --git a/gfx/thebes/gfxBaseSharedMemorySurface.h b/gfx/thebes/gfxBaseSharedMemorySurface.h index 56c107da1b83c7..bf0826727faf48 100644 --- a/gfx/thebes/gfxBaseSharedMemorySurface.h +++ b/gfx/thebes/gfxBaseSharedMemorySurface.h @@ -38,12 +38,13 @@ class gfxBaseSharedMemorySurface : public Base { typedef mozilla::ipc::Shmem Shmem; friend class gfxReusableSharedImageSurfaceWrapper; -public: +protected: virtual ~gfxBaseSharedMemorySurface() { MOZ_COUNT_DTOR(gfxBaseSharedMemorySurface); } +public: /** * Return a new gfxSharedImageSurface around a shmem segment newly * allocated by this function. |aAllocator| is the object used to diff --git a/gfx/thebes/gfxReusableImageSurfaceWrapper.h b/gfx/thebes/gfxReusableImageSurfaceWrapper.h index b323615c358fb8..51451acd453f33 100644 --- a/gfx/thebes/gfxReusableImageSurfaceWrapper.h +++ b/gfx/thebes/gfxReusableImageSurfaceWrapper.h @@ -16,8 +16,10 @@ class gfxImageSurface; class gfxReusableImageSurfaceWrapper : public gfxReusableSurfaceWrapper { public: gfxReusableImageSurfaceWrapper(gfxImageSurface* aSurface); +protected: ~gfxReusableImageSurfaceWrapper(); +public: const unsigned char* GetReadOnlyData() const MOZ_OVERRIDE; gfxImageFormat Format() MOZ_OVERRIDE; gfxReusableSurfaceWrapper* GetWritable(gfxImageSurface** aSurface) MOZ_OVERRIDE; diff --git a/gfx/thebes/gfxReusableSharedImageSurfaceWrapper.h b/gfx/thebes/gfxReusableSharedImageSurfaceWrapper.h index 57ea6e849e9893..b6d49b9a3adfd4 100644 --- a/gfx/thebes/gfxReusableSharedImageSurfaceWrapper.h +++ b/gfx/thebes/gfxReusableSharedImageSurfaceWrapper.h @@ -27,8 +27,10 @@ class gfxReusableSharedImageSurfaceWrapper : public gfxReusableSurfaceWrapper { public: gfxReusableSharedImageSurfaceWrapper(mozilla::layers::ISurfaceAllocator* aAllocator, gfxSharedImageSurface* aSurface); +protected: ~gfxReusableSharedImageSurfaceWrapper(); +public: const unsigned char* GetReadOnlyData() const MOZ_OVERRIDE; gfxImageFormat Format() MOZ_OVERRIDE; gfxReusableSurfaceWrapper* GetWritable(gfxImageSurface** aSurface) MOZ_OVERRIDE; diff --git a/ipc/glue/BackgroundChildImpl.cpp b/ipc/glue/BackgroundChildImpl.cpp index e054f32afee730..9e59303397e5c1 100644 --- a/ipc/glue/BackgroundChildImpl.cpp +++ b/ipc/glue/BackgroundChildImpl.cpp @@ -18,14 +18,16 @@ class TestChild MOZ_FINAL : public mozilla::ipc::PBackgroundTestChild TestChild(const nsCString& aTestArg) : mTestArg(aTestArg) { - MOZ_COUNT_CTOR(mozilla::ipc::BackgroundTestChild); + MOZ_COUNT_CTOR(TestChild); } +protected: ~TestChild() { - MOZ_COUNT_DTOR(mozilla::ipc::BackgroundTestChild); + MOZ_COUNT_DTOR(TestChild); } +public: virtual bool Recv__delete__(const nsCString& aTestArg) MOZ_OVERRIDE; }; diff --git a/ipc/glue/BackgroundParentImpl.cpp b/ipc/glue/BackgroundParentImpl.cpp index 32d90b8ae8e55b..e5abe9782843ac 100644 --- a/ipc/glue/BackgroundParentImpl.cpp +++ b/ipc/glue/BackgroundParentImpl.cpp @@ -33,14 +33,16 @@ class TestParent MOZ_FINAL : public mozilla::ipc::PBackgroundTestParent TestParent() { - MOZ_COUNT_CTOR(mozilla::ipc::BackgroundTestParent); + MOZ_COUNT_CTOR(TestParent); } +protected: ~TestParent() { - MOZ_COUNT_DTOR(mozilla::ipc::BackgroundTestParent); + MOZ_COUNT_DTOR(TestParent); } +public: virtual void ActorDestroy(ActorDestroyReason aWhy) MOZ_OVERRIDE; }; diff --git a/layout/base/MaskLayerImageCache.cpp b/layout/base/MaskLayerImageCache.cpp index d047826d558a9f..32bf9d4ddee79f 100644 --- a/layout/base/MaskLayerImageCache.cpp +++ b/layout/base/MaskLayerImageCache.cpp @@ -57,4 +57,31 @@ MaskLayerImageCache::PutImage(const MaskLayerImageKey* aKey, ImageContainer* aCo entry->mContainer = aContainer; } +// This case is particularly 'clever' because it uses AddRef/Release to track the use +// not to release the object. +template<> +struct HasDangerousPublicDestructor +{ + static const bool value = true; +}; + +MaskLayerImageCache::MaskLayerImageKey::MaskLayerImageKey() + : mLayerCount(0) + , mRoundedClipRects() +{ + MOZ_COUNT_CTOR(MaskLayerImageKey); +} + +MaskLayerImageCache::MaskLayerImageKey::MaskLayerImageKey(const MaskLayerImageKey& aKey) + : mLayerCount(aKey.mLayerCount) + , mRoundedClipRects(aKey.mRoundedClipRects) +{ + MOZ_COUNT_CTOR(MaskLayerImageKey); +} + +MaskLayerImageCache::MaskLayerImageKey::~MaskLayerImageKey() +{ + MOZ_COUNT_DTOR(MaskLayerImageKey); +} + } diff --git a/layout/base/MaskLayerImageCache.h b/layout/base/MaskLayerImageCache.h index 5c89ad6f5d74f4..f55af9a131cd6b 100644 --- a/layout/base/MaskLayerImageCache.h +++ b/layout/base/MaskLayerImageCache.h @@ -131,23 +131,10 @@ class MaskLayerImageCache */ struct MaskLayerImageKey { - MaskLayerImageKey() - : mLayerCount(0) - , mRoundedClipRects() - { - MOZ_COUNT_CTOR(MaskLayerImageKey); - } - MaskLayerImageKey(const MaskLayerImageKey& aKey) - : mLayerCount(aKey.mLayerCount) - , mRoundedClipRects(aKey.mRoundedClipRects) - { - MOZ_COUNT_CTOR(MaskLayerImageKey); - } + MaskLayerImageKey(); + MaskLayerImageKey(const MaskLayerImageKey& aKey); - ~MaskLayerImageKey() - { - MOZ_COUNT_DTOR(MaskLayerImageKey); - } + ~MaskLayerImageKey(); void AddRef() const { ++mLayerCount; } void Release() const @@ -199,7 +186,8 @@ class MaskLayerImageCache typedef const MaskLayerImageKey& KeyType; typedef const MaskLayerImageKey* KeyTypePointer; - MaskLayerImageEntry(KeyTypePointer aKey) : mKey(aKey) + MaskLayerImageEntry(KeyTypePointer aKey) + : mKey(aKey) { MOZ_COUNT_CTOR(MaskLayerImageEntry); } @@ -247,6 +235,7 @@ class MaskLayerImageCache static PLDHashOperator SweepFunc(MaskLayerImageEntry* aEntry, void* aUserArg); }; + } diff --git a/layout/forms/nsComboboxControlFrame.cpp b/layout/forms/nsComboboxControlFrame.cpp index 977815de274d37..73b971231516cb 100644 --- a/layout/forms/nsComboboxControlFrame.cpp +++ b/layout/forms/nsComboboxControlFrame.cpp @@ -369,11 +369,14 @@ class nsResizeDropdownAtFinalPosition { MOZ_COUNT_CTOR(nsResizeDropdownAtFinalPosition); } + +protected: ~nsResizeDropdownAtFinalPosition() { MOZ_COUNT_DTOR(nsResizeDropdownAtFinalPosition); } +public: virtual bool ReflowFinished() MOZ_OVERRIDE { Run(); diff --git a/netwerk/cache2/CacheEntry.h b/netwerk/cache2/CacheEntry.h index 34dc6f32ec3266..bd4db8a577ab44 100644 --- a/netwerk/cache2/CacheEntry.h +++ b/netwerk/cache2/CacheEntry.h @@ -20,6 +20,7 @@ #include "nsString.h" #include "nsCOMArray.h" #include "nsThreadUtils.h" +#include "mozilla/Attributes.h" #include "mozilla/Mutex.h" #include "mozilla/TimeStamp.h" @@ -364,15 +365,16 @@ class CacheEntryHandle : public nsICacheEntry }; -class CacheOutputCloseListener : public nsRunnable +class CacheOutputCloseListener MOZ_FINAL : public nsRunnable { public: void OnOutputClosed(); - virtual ~CacheOutputCloseListener(); private: friend class CacheEntry; + virtual ~CacheOutputCloseListener(); + NS_DECL_NSIRUNNABLE CacheOutputCloseListener(CacheEntry* aEntry); diff --git a/netwerk/cache2/CacheFile.cpp b/netwerk/cache2/CacheFile.cpp index e6f4fbffda2756..a398bb3941b2a8 100644 --- a/netwerk/cache2/CacheFile.cpp +++ b/netwerk/cache2/CacheFile.cpp @@ -41,6 +41,7 @@ class NotifyCacheFileListenerEvent : public nsRunnable { MOZ_COUNT_CTOR(NotifyCacheFileListenerEvent); } +protected: ~NotifyCacheFileListenerEvent() { LOG(("NotifyCacheFileListenerEvent::~NotifyCacheFileListenerEvent() " @@ -48,6 +49,7 @@ class NotifyCacheFileListenerEvent : public nsRunnable { MOZ_COUNT_DTOR(NotifyCacheFileListenerEvent); } +public: NS_IMETHOD Run() { LOG(("NotifyCacheFileListenerEvent::Run() [this=%p]", this)); @@ -78,6 +80,7 @@ class NotifyChunkListenerEvent : public nsRunnable { MOZ_COUNT_CTOR(NotifyChunkListenerEvent); } +protected: ~NotifyChunkListenerEvent() { LOG(("NotifyChunkListenerEvent::~NotifyChunkListenerEvent() [this=%p]", @@ -85,6 +88,7 @@ class NotifyChunkListenerEvent : public nsRunnable { MOZ_COUNT_DTOR(NotifyChunkListenerEvent); } +public: NS_IMETHOD Run() { LOG(("NotifyChunkListenerEvent::Run() [this=%p]", this)); diff --git a/netwerk/cache2/CacheFileChunk.cpp b/netwerk/cache2/CacheFileChunk.cpp index 6cc0414e60ff4e..cb5b3858241c90 100644 --- a/netwerk/cache2/CacheFileChunk.cpp +++ b/netwerk/cache2/CacheFileChunk.cpp @@ -25,6 +25,7 @@ class NotifyUpdateListenerEvent : public nsRunnable { MOZ_COUNT_CTOR(NotifyUpdateListenerEvent); } +protected: ~NotifyUpdateListenerEvent() { LOG(("NotifyUpdateListenerEvent::~NotifyUpdateListenerEvent() [this=%p]", @@ -32,6 +33,7 @@ class NotifyUpdateListenerEvent : public nsRunnable { MOZ_COUNT_DTOR(NotifyUpdateListenerEvent); } +public: NS_IMETHOD Run() { LOG(("NotifyUpdateListenerEvent::Run() [this=%p]", this)); diff --git a/netwerk/cache2/CacheFileIOManager.cpp b/netwerk/cache2/CacheFileIOManager.cpp index d50c00cedd3284..a4500bfd12dbed 100644 --- a/netwerk/cache2/CacheFileIOManager.cpp +++ b/netwerk/cache2/CacheFileIOManager.cpp @@ -538,11 +538,13 @@ class ShutdownEvent : public nsRunnable { MOZ_COUNT_CTOR(ShutdownEvent); } +protected: ~ShutdownEvent() { MOZ_COUNT_DTOR(ShutdownEvent); } +public: NS_IMETHOD Run() { MutexAutoLock lock(*mLock); @@ -582,11 +584,13 @@ class OpenFileEvent : public nsRunnable { MOZ_EVENT_TRACER_WAIT(static_cast(this), "net::cache::open-background"); } +protected: ~OpenFileEvent() { MOZ_COUNT_DTOR(OpenFileEvent); } +public: NS_IMETHOD Run() { if (mResultOnAnyThread || mTarget) { @@ -674,11 +678,13 @@ class ReadEvent : public nsRunnable { MOZ_EVENT_TRACER_WAIT(static_cast(this), "net::cache::read-background"); } +protected: ~ReadEvent() { MOZ_COUNT_DTOR(ReadEvent); } +public: NS_IMETHOD Run() { if (mResultOnAnyThread || mTarget) { @@ -739,6 +745,7 @@ class WriteEvent : public nsRunnable { MOZ_EVENT_TRACER_WAIT(static_cast(this), "net::cache::write-background"); } +protected: ~WriteEvent() { MOZ_COUNT_DTOR(WriteEvent); @@ -748,6 +755,7 @@ class WriteEvent : public nsRunnable { } } +public: NS_IMETHOD Run() { if (mTarget) { @@ -803,11 +811,13 @@ class DoomFileEvent : public nsRunnable { MOZ_EVENT_TRACER_WAIT(static_cast(this), "net::cache::doom-background"); } +protected: ~DoomFileEvent() { MOZ_COUNT_DTOR(DoomFileEvent); } +public: NS_IMETHOD Run() { if (mTarget) { @@ -858,11 +868,13 @@ class DoomFileByKeyEvent : public nsRunnable { MOZ_ASSERT(mTarget); } +protected: ~DoomFileByKeyEvent() { MOZ_COUNT_DTOR(DoomFileByKeyEvent); } +public: NS_IMETHOD Run() { if (mTarget) { @@ -900,11 +912,13 @@ class ReleaseNSPRHandleEvent : public nsRunnable { MOZ_COUNT_CTOR(ReleaseNSPRHandleEvent); } +protected: ~ReleaseNSPRHandleEvent() { MOZ_COUNT_DTOR(ReleaseNSPRHandleEvent); } +public: NS_IMETHOD Run() { if (mHandle->mFD && !mHandle->IsClosed()) { @@ -932,11 +946,13 @@ class TruncateSeekSetEOFEvent : public nsRunnable { mTarget = static_cast(NS_GetCurrentThread()); } +protected: ~TruncateSeekSetEOFEvent() { MOZ_COUNT_DTOR(TruncateSeekSetEOFEvent); } +public: NS_IMETHOD Run() { if (mTarget) { @@ -980,11 +996,13 @@ class RenameFileEvent : public nsRunnable { mTarget = static_cast(NS_GetCurrentThread()); } +protected: ~RenameFileEvent() { MOZ_COUNT_DTOR(RenameFileEvent); } +public: NS_IMETHOD Run() { if (mTarget) { @@ -1026,11 +1044,13 @@ class InitIndexEntryEvent : public nsRunnable { MOZ_COUNT_CTOR(InitIndexEntryEvent); } +protected: ~InitIndexEntryEvent() { MOZ_COUNT_DTOR(InitIndexEntryEvent); } +public: NS_IMETHOD Run() { if (mHandle->IsClosed() || mHandle->IsDoomed()) { @@ -1075,11 +1095,13 @@ class UpdateIndexEntryEvent : public nsRunnable { } } +protected: ~UpdateIndexEntryEvent() { MOZ_COUNT_DTOR(UpdateIndexEntryEvent); } +public: NS_IMETHOD Run() { if (mHandle->IsClosed() || mHandle->IsDoomed()) { diff --git a/netwerk/protocol/ftp/nsFtpConnectionThread.cpp b/netwerk/protocol/ftp/nsFtpConnectionThread.cpp index c9c9a723cd18bc..974dc7d2f6209a 100644 --- a/netwerk/protocol/ftp/nsFtpConnectionThread.cpp +++ b/netwerk/protocol/ftp/nsFtpConnectionThread.cpp @@ -1951,10 +1951,12 @@ class nsFtpAsyncAlert : public nsRunnable { MOZ_COUNT_CTOR(nsFtpAsyncAlert); } +protected: virtual ~nsFtpAsyncAlert() { MOZ_COUNT_DTOR(nsFtpAsyncAlert); } +public: NS_IMETHOD Run() { if (mPrompter) { diff --git a/parser/html/nsHtml5OwningUTF16Buffer.h b/parser/html/nsHtml5OwningUTF16Buffer.h index e8efc26e5f6112..c4418d0b1d4371 100644 --- a/parser/html/nsHtml5OwningUTF16Buffer.h +++ b/parser/html/nsHtml5OwningUTF16Buffer.h @@ -24,11 +24,13 @@ class nsHtml5OwningUTF16Buffer : public nsHtml5UTF16Buffer */ nsHtml5OwningUTF16Buffer(void* aKey); +protected: /** * Takes care of releasing the owned buffer. */ ~nsHtml5OwningUTF16Buffer(); +public: /** * The next buffer in a queue. */ diff --git a/rdf/base/src/nsInMemoryDataSource.cpp b/rdf/base/src/nsInMemoryDataSource.cpp index 4929b37f1bd27e..8ece1294be1b55 100644 --- a/rdf/base/src/nsInMemoryDataSource.cpp +++ b/rdf/base/src/nsInMemoryDataSource.cpp @@ -89,8 +89,10 @@ class Assertion bool aTruthValue); Assertion(nsIRDFResource* aSource); // PLDHashTable assertion variant +private: ~Assertion(); +public: void AddRef() { if (mRefCnt == UINT16_MAX) { NS_WARNING("refcount overflow, leaking Assertion"); @@ -1317,7 +1319,7 @@ InMemoryDataSource::LockedUnassert(nsIRDFResource* aSource, else { // If this second-level hash empties out, clean it up. if (!root->u.hash.mPropertyHash->entryCount) { - delete root; + root->Release(); SetForwardArcs(aSource, nullptr); } } @@ -1921,7 +1923,7 @@ InMemoryDataSource::SweepForwardArcsEntries(PLDHashTable* aTable, // If the sub-hash is now empty, clean it up. if (!as->u.hash.mPropertyHash->entryCount) { - delete as; + as->Release(); result = PL_DHASH_REMOVE; } diff --git a/widget/xpwidgets/nsBaseWidget.cpp b/widget/xpwidgets/nsBaseWidget.cpp index 91a6bdcb8bc4c0..c06c1967fa0664 100644 --- a/widget/xpwidgets/nsBaseWidget.cpp +++ b/widget/xpwidgets/nsBaseWidget.cpp @@ -905,7 +905,7 @@ void nsBaseWidget::CreateCompositor(int aWidth, int aHeight) mCompositorParent = NewCompositorParent(aWidth, aHeight); MessageChannel *parentChannel = mCompositorParent->GetIPCChannel(); - ClientLayerManager* lm = new ClientLayerManager(this); + nsRefPtr lm = new ClientLayerManager(this); MessageLoop *childMessageLoop = CompositorParent::CompositorLoop(); mCompositorChild = new CompositorChild(lm); mCompositorChild->Open(parentChannel, childMessageLoop, ipc::ChildSide); @@ -928,7 +928,7 @@ void nsBaseWidget::CreateCompositor(int aWidth, int aHeight) if (success) { ShadowLayerForwarder* lf = lm->AsShadowForwarder(); if (!lf) { - delete lm; + lm = nullptr; mCompositorChild = nullptr; return; } @@ -937,7 +937,7 @@ void nsBaseWidget::CreateCompositor(int aWidth, int aHeight) ImageBridgeChild::IdentifyCompositorTextureHost(textureFactoryIdentifier); WindowUsesOMTC(); - mLayerManager = lm; + mLayerManager = lm.forget(); return; }