From 7836ef64149582f0151d92b4d621482dc6aa1e0f Mon Sep 17 00:00:00 2001 From: Scott Johnson Date: Mon, 28 Nov 2011 13:12:16 -0600 Subject: [PATCH] Backed out changeset 068e3078ced6 --- .../base/src/tree/src/nsITreeImageListener.h | 64 +++++++++++++++++++ .../xul/base/src/tree/src/nsTreeBodyFrame.cpp | 8 +-- .../base/src/tree/src/nsTreeImageListener.cpp | 6 +- .../base/src/tree/src/nsTreeImageListener.h | 4 +- 4 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 layout/xul/base/src/tree/src/nsITreeImageListener.h diff --git a/layout/xul/base/src/tree/src/nsITreeImageListener.h b/layout/xul/base/src/tree/src/nsITreeImageListener.h new file mode 100644 index 000000000000..7fe9538eeb10 --- /dev/null +++ b/layout/xul/base/src/tree/src/nsITreeImageListener.h @@ -0,0 +1,64 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Dave Hyatt (Original Author) + * Jan Varga + * Scott Johnson , Mozilla Corporation + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsITreeImageListener_h__ +#define nsITreeImageListener_h__ + +// The interface for our image listener. +// {90586540-2D50-403e-8DCE-981CAA778444} +#define NS_ITREEIMAGELISTENER_IID \ +{ 0x90586540, 0x2d50, 0x403e, { 0x8d, 0xce, 0x98, 0x1c, 0xaa, 0x77, 0x84, 0x44 } } + +class nsITreeImageListener : public nsISupports +{ +public: + NS_DECLARE_STATIC_IID_ACCESSOR(NS_ITREEIMAGELISTENER_IID) + + NS_IMETHOD AddCell(PRInt32 aIndex, nsITreeColumn* aCol) = 0; + + /** + * Clear the internal frame pointer to prevent dereferencing an object + * that no longer exists. + */ + NS_IMETHOD ClearFrame() = 0; +}; + +NS_DEFINE_STATIC_IID_ACCESSOR(nsITreeImageListener, NS_ITREEIMAGELISTENER_IID) + +#endif diff --git a/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp b/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp index 8e3c73aac7d3..73e635e6d8b4 100644 --- a/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp +++ b/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp @@ -2157,11 +2157,9 @@ nsTreeBodyFrame::GetImage(PRInt32 aRowIndex, nsTreeColumn* aCol, bool aUseContex // We either aren't done loading, or we're animating. Add our row as a listener for invalidations. nsCOMPtr obs; imgReq->GetDecoderObserver(getter_AddRefs(obs)); - - if (obs) { - static_cast (obs.get())->AddCell(aRowIndex, aCol); - } - + nsCOMPtr listener(do_QueryInterface(obs)); + if (listener) + listener->AddCell(aRowIndex, aCol); return NS_OK; } } diff --git a/layout/xul/base/src/tree/src/nsTreeImageListener.cpp b/layout/xul/base/src/tree/src/nsTreeImageListener.cpp index 3155f5d9224f..eb16264847e1 100644 --- a/layout/xul/base/src/tree/src/nsTreeImageListener.cpp +++ b/layout/xul/base/src/tree/src/nsTreeImageListener.cpp @@ -42,7 +42,7 @@ #include "imgIRequest.h" #include "imgIContainer.h" -NS_IMPL_ISUPPORTS2(nsTreeImageListener, imgIDecoderObserver, imgIContainerObserver) +NS_IMPL_ISUPPORTS3(nsTreeImageListener, imgIDecoderObserver, imgIContainerObserver, nsITreeImageListener) nsTreeImageListener::nsTreeImageListener(nsTreeBodyFrame* aTreeFrame) : mTreeFrame(aTreeFrame), @@ -92,7 +92,7 @@ NS_IMETHODIMP nsTreeImageListener::FrameChanged(imgIContainer *aContainer, } -void +NS_IMETHODIMP nsTreeImageListener::AddCell(PRInt32 aIndex, nsITreeColumn* aCol) { if (!mInvalidationArea) { @@ -114,6 +114,8 @@ nsTreeImageListener::AddCell(PRInt32 aIndex, nsITreeColumn* aCol) mInvalidationArea->AddRow(aIndex); } } + + return NS_OK; } diff --git a/layout/xul/base/src/tree/src/nsTreeImageListener.h b/layout/xul/base/src/tree/src/nsTreeImageListener.h index b062923211b1..c32501b38cfa 100644 --- a/layout/xul/base/src/tree/src/nsTreeImageListener.h +++ b/layout/xul/base/src/tree/src/nsTreeImageListener.h @@ -48,7 +48,7 @@ #include "nsITreeImageListener.h" // This class handles image load observation. -class nsTreeImageListener : public nsStubImageDecoderObserver +class nsTreeImageListener : public nsStubImageDecoderObserver, public nsITreeImageListener { public: nsTreeImageListener(nsTreeBodyFrame *aTreeFrame); @@ -64,6 +64,7 @@ public: NS_IMETHOD FrameChanged(imgIContainer *aContainer, const nsIntRect *aDirtyRect); + NS_IMETHOD AddCell(PRInt32 aIndex, nsITreeColumn* aCol); NS_IMETHOD ClearFrame(); friend class nsTreeBodyFrame; @@ -71,7 +72,6 @@ public: protected: void UnsuppressInvalidation() { mInvalidationSuppressed = false; } void Invalidate(); - void AddCell(PRInt32 aIndex, nsITreeColumn* aCol); private: nsTreeBodyFrame* mTreeFrame;