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();