Index: nsWebBrowserPersist.h =================================================================== RCS file: /cvsroot/mozilla/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.h,v retrieving revision 1.30 diff -p -u -u -p -U10 -r1.30 nsWebBrowserPersist.h --- nsWebBrowserPersist.h 10 Apr 2005 12:37:36 -0000 1.30 +++ nsWebBrowserPersist.h 13 Oct 2005 21:21:41 -0000 @@ -197,20 +197,21 @@ private: nsCOMPtr mMIMEService; nsCOMPtr mURI; nsCOMPtr mProgressListener; /** * Progress listener for 64-bit values; this is the same object as * mProgressListener, but is a member to avoid having to qi it for each * progress notification. */ nsCOMPtr mProgressListener2; + nsCOMPtr mEventSink; nsHashtable mOutputMap; nsHashtable mUploadList; nsHashtable mURIMap; nsVoidArray mDocList; nsVoidArray mCleanupList; nsCStringArray mFilenameList; PRPackedBool mFirstAndOnlyUse; PRPackedBool mCancel; PRPackedBool mJustStartedLoading; PRPackedBool mCompleted; Index: nsWebBrowserPersist.cpp =================================================================== RCS file: /cvsroot/mozilla/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp,v retrieving revision 1.109 diff -p -u -u -p -U10 -r1.109 nsWebBrowserPersist.cpp --- nsWebBrowserPersist.cpp 26 Apr 2005 14:07:21 -0000 1.109 +++ nsWebBrowserPersist.cpp 13 Oct 2005 21:21:42 -0000 @@ -365,20 +361,21 @@ NS_IMETHODIMP nsWebBrowserPersist::GetPr *aProgressListener = mProgressListener; NS_IF_ADDREF(*aProgressListener); return NS_OK; } NS_IMETHODIMP nsWebBrowserPersist::SetProgressListener( nsIWebProgressListener * aProgressListener) { mProgressListener = aProgressListener; mProgressListener2 = do_QueryInterface(aProgressListener); + mEventSink = do_GetInterface(aProgressListener); return NS_OK; } /* void saveURI (in nsIURI aURI, in nsISupports aCacheKey, in nsIURI aReferrer, in nsIInputStream aPostData, in wstring aExtraHeaders, in nsISupports aFile); */ NS_IMETHODIMP nsWebBrowserPersist::SaveURI( nsIURI *aURI, nsISupports *aCacheKey, nsIURI *aReferrer, nsIInputStream *aPostData, const char *aExtraHeaders, nsISupports *aFile) { NS_ENSURE_TRUE(mFirstAndOnlyUse, NS_ERROR_FAILURE); @@ -777,20 +774,21 @@ NS_IMETHODIMP nsWebBrowserPersist::OnSto if (completed) { stateFlags |= nsIWebProgressListener::STATE_IS_NETWORK; } mProgressListener->OnStateChange(nsnull, request, stateFlags, status); } if (completed) { mProgressListener = nsnull; mProgressListener2 = nsnull; + mEventSink = nsnull; } return NS_OK; } //***************************************************************************** // nsWebBrowserPersist::nsIStreamListener //***************************************************************************** static NS_METHOD DiscardSegments(nsIInputStream *input, @@ -974,22 +972,27 @@ NS_IMETHODIMP nsWebBrowserPersist::OnPro mProgressListener2->OnProgressChange64(nsnull, request, aProgress, aProgressMax, mTotalCurrentProgress, mTotalMaxProgress); } else { // have to truncate 64-bit to 32bit mProgressListener->OnProgressChange(nsnull, request, nsUint64(aProgress), nsUint64(aProgressMax), mTotalCurrentProgress, mTotalMaxProgress); } - return NS_OK; + /* If our progress listener implements nsIProgressEventSink, forward the notification */ + if (mEventSink) + { + mEventSink->OnProgress(request, ctxt, aProgress, aProgressMax); + } + return NS_OK; } /* void onStatus (in nsIRequest request, in nsISupports ctxt, in nsresult status, in wstring statusArg); */ NS_IMETHODIMP nsWebBrowserPersist::OnStatus( nsIRequest *request, nsISupports *ctxt, nsresult status, const PRUnichar *statusArg) { if (mProgressListener) { @@ -1009,20 +1012,27 @@ NS_IMETHODIMP nsWebBrowserPersist::OnSta case nsITransport::STATUS_WRITING: break; default: // Pass other notifications (for legitimate errors) along. mProgressListener->OnStatusChange(nsnull, request, status, statusArg); break; } } + + /* If our progress listener implements nsIProgressEventSink, forward the notification */ + if (mEventSink) + { + mEventSink->OnStatus(request, ctxt, status, statusArg); + } + return NS_OK; } //***************************************************************************** // nsWebBrowserPersist private methods //***************************************************************************** // Convert error info into proper message text and send OnStatusChange notification // to the web progress listener.