diff --git a/mozilla/content/html/document/src/nsHTMLDocument.cpp b/mozilla/content/html/document/src/nsHTMLDocument.cpp
index d999899f538..04c7948713d 100644
--- a/mozilla/content/html/document/src/nsHTMLDocument.cpp
+++ b/mozilla/content/html/document/src/nsHTMLDocument.cpp
@@ -308,9 +308,6 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL,
nsAutoString charset = "ISO-8859-1"; // fallback value in case webShell return error
nsCharsetSource charsetSource = kCharsetFromDocTypeDefault;
- const PRUnichar* requestCharset = nsnull;
- nsCharsetSource requestCharsetSource = kCharsetUninitialized;
-
#ifdef rickgdebug
nsString outString; // added out. Redirect to stdout if desired -- gpk 04/01/99
@@ -327,12 +324,6 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL,
charset = defaultCharsetFromWebShell;
charsetSource = kCharsetFromUserDefault;
}
- // for html, we need to find out the Meta tag from the hint.
- rv = webShell->GetCharacterSetHint(&requestCharset, &requestCharsetSource);
- if(NS_SUCCEEDED(rv)) {
- if(requestCharsetSource > charsetSource)
- charset = requestCharset;
- }
}
NS_IF_RELEASE(webShell);
#endif
@@ -340,6 +331,8 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL,
// XXXX
// We should take care two more cases here
// 1. The charset attribute from HTTP header
+ // 2. The charset parameter from the META Tag -
+ // which explicit pass to nsWebShell from nsCharsetObserver
if (NS_SUCCEEDED(rv)) {
rv = this->SetDocumentCharacterSet(charset);
diff --git a/mozilla/intl/chardet/src/nsMetaCharsetObserver.cpp b/mozilla/intl/chardet/src/nsMetaCharsetObserver.cpp
index a1a42507c30..c83386f489e 100644
--- a/mozilla/intl/chardet/src/nsMetaCharsetObserver.cpp
+++ b/mozilla/intl/chardet/src/nsMetaCharsetObserver.cpp
@@ -19,7 +19,7 @@
#include "nsICharsetAlias.h"
#undef NS_IMPL_IDS
-//#define DONT_INFORM_WEBSHELL
+#define DONT_INFORM_WEBSHELL
#include "nsMetaCharsetObserver.h"
#include "nsIMetaCharsetService.h"
@@ -34,6 +34,7 @@
#include "nsIServiceManager.h"
#include "nsIDocumentLoader.h"
#include "nsIWebShellServices.h"
+#include "nsIWebShell.h"
#include "nsIContentViewerContainer.h"
static NS_DEFINE_IID(kIElementObserverIID, NS_IELEMENTOBSERVER_IID);
@@ -45,6 +46,7 @@ static NS_DEFINE_IID(kIMetaCharsetServiceIID, NS_IMETA_CHARSET_SERVICE_IID);
static NS_DEFINE_IID(kDocLoaderServiceCID, NS_DOCUMENTLOADER_SERVICE_CID);
static NS_DEFINE_IID(kIDocumentLoaderIID, NS_IDOCUMENTLOADER_IID);
static NS_DEFINE_IID(kIWebShellServicesIID, NS_IWEB_SHELL_SERVICES_IID);
+static NS_DEFINE_IID(kIWebShellIID, NS_IWEB_SHELL_IID);
//==========================================================================
//
// Class declaration for the class
@@ -283,7 +285,12 @@ NS_IMETHODIMP nsMetaCharsetObserver::NotifyWebShell(
nsIDocumentLoader * docLoader = nsnull;
nsIContentViewerContainer * cvc = nsnull;
nsIWebShellServices* wss = nsnull;
-
+ nsIWebShell* iws = nsnull;
+ const PRUnichar* theURL = nsnull;
+ PRInt32 historyIdx = -1;
+ nsAutoString urlStr;
+ const char* urlCStr = nsnull;
+
if(NS_FAILED(res =nsServiceManager::GetService(kDocLoaderServiceCID,
kIDocumentLoaderIID,
(nsISupports**)&docLoader)))
@@ -295,6 +302,23 @@ NS_IMETHODIMP nsMetaCharsetObserver::NotifyWebShell(
if(NS_FAILED( res = cvc->QueryInterface(kIWebShellServicesIID, (void**)&wss)))
goto done;
+ if(NS_FAILED( res = wss->QueryInterface(kIWebShellIID, (void**)&iws)))
+ goto done;
+
+
+ if(NS_FAILED( res = iws->GetHistoryIndex(historyIdx) ))
+ goto done;
+
+ // ask the webshelle about the current URL
+ if(NS_FAILED( res = iws->GetURL(historyIdx, &theURL) ))
+ goto done;
+
+ // convert the PRUnichar* to const char*
+ urlStr = theURL;
+ urlCStr = urlStr.ToNewCString();
+ if(nsnull == urlCStr)
+ goto done;
+
#ifndef DONT_INFORM_WEBSHELL
// ask the webshellservice to load the URL
if(NS_FAILED( res = wss->SetRendering(PR_TRUE) ))
@@ -303,14 +327,18 @@ NS_IMETHODIMP nsMetaCharsetObserver::NotifyWebShell(
if(NS_FAILED(res = wss->StopDocumentLoad()))
goto done;
- if(NS_FAILED(res = wss->ReloadDocument(charset, source)))
+ if(NS_FAILED(res = wss->LoadDocument(urlCStr, charset, source)))
goto done;
#endif
done:
+ if(urlCStr) {
+ delete [] (char*) urlCStr;
+ }
if(docLoader) {
nsServiceManager::ReleaseService(kDocLoaderServiceCID,docLoader);
}
+ NS_IF_RELEASE(iws);
NS_IF_RELEASE(cvc);
NS_IF_RELEASE(wss);
return res;
diff --git a/mozilla/layout/html/document/src/nsHTMLDocument.cpp b/mozilla/layout/html/document/src/nsHTMLDocument.cpp
index d999899f538..04c7948713d 100644
--- a/mozilla/layout/html/document/src/nsHTMLDocument.cpp
+++ b/mozilla/layout/html/document/src/nsHTMLDocument.cpp
@@ -308,9 +308,6 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL,
nsAutoString charset = "ISO-8859-1"; // fallback value in case webShell return error
nsCharsetSource charsetSource = kCharsetFromDocTypeDefault;
- const PRUnichar* requestCharset = nsnull;
- nsCharsetSource requestCharsetSource = kCharsetUninitialized;
-
#ifdef rickgdebug
nsString outString; // added out. Redirect to stdout if desired -- gpk 04/01/99
@@ -327,12 +324,6 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL,
charset = defaultCharsetFromWebShell;
charsetSource = kCharsetFromUserDefault;
}
- // for html, we need to find out the Meta tag from the hint.
- rv = webShell->GetCharacterSetHint(&requestCharset, &requestCharsetSource);
- if(NS_SUCCEEDED(rv)) {
- if(requestCharsetSource > charsetSource)
- charset = requestCharset;
- }
}
NS_IF_RELEASE(webShell);
#endif
@@ -340,6 +331,8 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL,
// XXXX
// We should take care two more cases here
// 1. The charset attribute from HTTP header
+ // 2. The charset parameter from the META Tag -
+ // which explicit pass to nsWebShell from nsCharsetObserver
if (NS_SUCCEEDED(rv)) {
rv = this->SetDocumentCharacterSet(charset);