From 70b892fdf7e96339c2aedb53087e4ae65111df3c Mon Sep 17 00:00:00 2001 From: "pedemont%us.ibm.com" Date: Mon, 25 Oct 2004 15:55:33 +0000 Subject: [PATCH] Bug 265289 - GetListenerInfo comparing weakrefs rather than referents. r=bsmedberg, sr=darin git-svn-id: svn://10.0.0.236/trunk@164364 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/uriloader/base/nsDocLoader.cpp | 26 +++++++++++++------------- mozilla/uriloader/base/nsDocLoader.h | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/mozilla/uriloader/base/nsDocLoader.cpp b/mozilla/uriloader/base/nsDocLoader.cpp index 334c46271cb..5a91d488174 100644 --- a/mozilla/uriloader/base/nsDocLoader.cpp +++ b/mozilla/uriloader/base/nsDocLoader.cpp @@ -852,17 +852,18 @@ nsDocLoaderImpl::AddProgressListener(nsIWebProgressListener *aListener, PRUint32 aNotifyMask) { nsresult rv; - nsWeakPtr listener = do_GetWeakReference(aListener); - if (!listener) { - return NS_ERROR_INVALID_ARG; - } - nsListenerInfo* info = GetListenerInfo(listener); + nsListenerInfo* info = GetListenerInfo(aListener); if (info) { // The listener is already registered! return NS_ERROR_FAILURE; } + nsWeakPtr listener = do_GetWeakReference(aListener); + if (!listener) { + return NS_ERROR_INVALID_ARG; + } + info = new nsListenerInfo(listener, aNotifyMask); if (!info) { return NS_ERROR_OUT_OF_MEMORY; @@ -876,12 +877,8 @@ NS_IMETHODIMP nsDocLoaderImpl::RemoveProgressListener(nsIWebProgressListener *aListener) { nsresult rv; - nsWeakPtr listener = do_GetWeakReference(aListener); - if (!listener) { - return NS_ERROR_INVALID_ARG; - } - nsListenerInfo* info = GetListenerInfo(listener); + nsListenerInfo* info = GetListenerInfo(aListener); if (info) { rv = mListenerInfoList.RemoveElement(info) ? NS_OK : NS_ERROR_FAILURE; delete info; @@ -1322,18 +1319,21 @@ nsDocLoaderImpl::FireOnStatusChange(nsIWebProgress* aWebProgress, } nsListenerInfo * -nsDocLoaderImpl::GetListenerInfo(nsIWeakReference *aListener) +nsDocLoaderImpl::GetListenerInfo(nsIWebProgressListener *aListener) { PRInt32 i, count; nsListenerInfo *info; + nsCOMPtr listener1 = do_QueryInterface(aListener); count = mListenerInfoList.Count(); for (i=0; imWeakListener)) { - return info; + if (info) { + nsCOMPtr listener2 = do_QueryReferent(info->mWeakListener); + if (listener1 == listener2) + return info; } } return nsnull; diff --git a/mozilla/uriloader/base/nsDocLoader.h b/mozilla/uriloader/base/nsDocLoader.h index 4f9a9c041b9..f38f8918c8f 100644 --- a/mozilla/uriloader/base/nsDocLoader.h +++ b/mozilla/uriloader/base/nsDocLoader.h @@ -175,7 +175,7 @@ protected: PLDHashTable mRequestInfoHash; private: - nsListenerInfo *GetListenerInfo(nsIWeakReference* aListener); + nsListenerInfo *GetListenerInfo(nsIWebProgressListener* aListener); PRInt32 GetMaxTotalProgress();