From 36d5b1704563484c2550aea3942c0d1b65ee2e12 Mon Sep 17 00:00:00 2001 From: "ftang%netscape.com" Date: Fri, 28 May 1999 21:32:29 +0000 Subject: [PATCH] change the ReloadDocument implementation by using RefreshURL do avoid reentrance problem in libnet git-svn-id: svn://10.0.0.236/trunk@33154 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/docshell/base/nsWebShell.cpp | 37 ++++++++++++++++++++++++---- mozilla/webshell/src/nsWebShell.cpp | 37 ++++++++++++++++++++++++---- 2 files changed, 64 insertions(+), 10 deletions(-) diff --git a/mozilla/docshell/base/nsWebShell.cpp b/mozilla/docshell/base/nsWebShell.cpp index 69a8d20ebf7..01ab710d4d7 100644 --- a/mozilla/docshell/base/nsWebShell.cpp +++ b/mozilla/docshell/base/nsWebShell.cpp @@ -293,6 +293,7 @@ public: // nsIRefreshURL interface methods... NS_IMETHOD RefreshURL(nsIURL* aURL, PRInt32 millis, PRBool repeat); + NS_IMETHOD RefreshURL(const char* aURL, PRInt32 millis, PRBool repeat); NS_IMETHOD CancelRefreshURLTimers(void); @@ -2027,7 +2028,18 @@ nsWebShell::ReloadDocument(const char* aCharset, mHintCharset = aCharset; mHintCharsetSource= aSource; - return this->Reload(nsURLReload); + nsString* s = (nsString*) mHistory.ElementAt(mHistoryIndex); + + nsresult rv = NS_OK; + if(s) { + char* url = s->ToNewCString(); + if(url) { + mHistoryIndex--; + rv = this->RefreshURL((const char*)url,0,PR_FALSE); + delete [] url; + } + } + return rv; } NS_IMETHODIMP @@ -2640,6 +2652,24 @@ void refreshData::Notify(nsITimer *aTimer) NS_IMETHODIMP nsWebShell::RefreshURL(nsIURL* aURL, PRInt32 millis, PRBool repeat) +{ + + nsresult rv = NS_OK; + if (nsnull == aURL) { + NS_PRECONDITION((aURL != nsnull), "Null pointer"); + rv = NS_ERROR_NULL_POINTER; + goto done; + } + + const char* spec; + aURL->GetSpec(&spec); + rv = RefreshURL(spec, millis, repeat); +done: + return rv; +} + +NS_IMETHODIMP +nsWebShell::RefreshURL(const char* aURL, PRInt32 millis, PRBool repeat) { nsresult rv = NS_OK; nsITimer *timer=nsnull; @@ -2663,10 +2693,7 @@ nsWebShell::RefreshURL(nsIURL* aURL, PRInt32 millis, PRBool repeat) data->mShell = this; NS_ADDREF(data->mShell); - const char* spec; - rv = aURL->GetSpec(&spec); - - data->mUrlSpec = spec; + data->mUrlSpec = aURL; data->mDelay = millis; data->mRepeat = repeat; diff --git a/mozilla/webshell/src/nsWebShell.cpp b/mozilla/webshell/src/nsWebShell.cpp index 69a8d20ebf7..01ab710d4d7 100644 --- a/mozilla/webshell/src/nsWebShell.cpp +++ b/mozilla/webshell/src/nsWebShell.cpp @@ -293,6 +293,7 @@ public: // nsIRefreshURL interface methods... NS_IMETHOD RefreshURL(nsIURL* aURL, PRInt32 millis, PRBool repeat); + NS_IMETHOD RefreshURL(const char* aURL, PRInt32 millis, PRBool repeat); NS_IMETHOD CancelRefreshURLTimers(void); @@ -2027,7 +2028,18 @@ nsWebShell::ReloadDocument(const char* aCharset, mHintCharset = aCharset; mHintCharsetSource= aSource; - return this->Reload(nsURLReload); + nsString* s = (nsString*) mHistory.ElementAt(mHistoryIndex); + + nsresult rv = NS_OK; + if(s) { + char* url = s->ToNewCString(); + if(url) { + mHistoryIndex--; + rv = this->RefreshURL((const char*)url,0,PR_FALSE); + delete [] url; + } + } + return rv; } NS_IMETHODIMP @@ -2640,6 +2652,24 @@ void refreshData::Notify(nsITimer *aTimer) NS_IMETHODIMP nsWebShell::RefreshURL(nsIURL* aURL, PRInt32 millis, PRBool repeat) +{ + + nsresult rv = NS_OK; + if (nsnull == aURL) { + NS_PRECONDITION((aURL != nsnull), "Null pointer"); + rv = NS_ERROR_NULL_POINTER; + goto done; + } + + const char* spec; + aURL->GetSpec(&spec); + rv = RefreshURL(spec, millis, repeat); +done: + return rv; +} + +NS_IMETHODIMP +nsWebShell::RefreshURL(const char* aURL, PRInt32 millis, PRBool repeat) { nsresult rv = NS_OK; nsITimer *timer=nsnull; @@ -2663,10 +2693,7 @@ nsWebShell::RefreshURL(nsIURL* aURL, PRInt32 millis, PRBool repeat) data->mShell = this; NS_ADDREF(data->mShell); - const char* spec; - rv = aURL->GetSpec(&spec); - - data->mUrlSpec = spec; + data->mUrlSpec = aURL; data->mDelay = millis; data->mRepeat = repeat;