diff --git a/mozilla/htmlparser/src/CNavDTD.cpp b/mozilla/htmlparser/src/CNavDTD.cpp
index 3d8929884a5..225daa642b3 100644
--- a/mozilla/htmlparser/src/CNavDTD.cpp
+++ b/mozilla/htmlparser/src/CNavDTD.cpp
@@ -954,6 +954,8 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode
nsAutoString theCharset;
theValue.Mid(theCharset, charsetValueStart, charsetValueEnd - charsetValueStart);
theScanner->SetDocumentCharset(theCharset, kCharsetFromMetaTag);
+ // XXX this should be delete after META charset really work
+ nsParser::gHackMetaCharset = theCharset;
} //if
} //if
}
diff --git a/mozilla/htmlparser/src/nsParser.cpp b/mozilla/htmlparser/src/nsParser.cpp
index c0d95d0c591..78b7e2fbefa 100644
--- a/mozilla/htmlparser/src/nsParser.cpp
+++ b/mozilla/htmlparser/src/nsParser.cpp
@@ -125,6 +125,9 @@ public:
static CSharedParserObjects* gSharedParserObjects=0;
+nsString nsParser::gHackMetaCharset = "";
+nsString nsParser::gHackMetaCharsetURL = "";
+
//----------------------------------------
/**
@@ -545,6 +548,7 @@ nsresult nsParser::Parse(nsIURL* aURL,nsIStreamObserver* aListener,PRBool aVerif
charsetSource = kCharsetFromDocTypeDefault;
+
nsresult result=kBadURL;
mDTDVerification=aVerifyEnabled;
if(aURL) {
@@ -552,6 +556,18 @@ nsresult nsParser::Parse(nsIURL* aURL,nsIStreamObserver* aListener,PRBool aVerif
nsresult rv = aURL->GetSpec(&spec);
if (rv != NS_OK) return rv;
nsAutoString theName(spec);
+
+ // XXX begin of meta tag charset hack
+
+ if(theName.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
+ {
+ charset = nsParser::gHackMetaCharset;
+ charsetSource = kCharsetFromMetaTag;
+ }
+ nsParser::gHackMetaCharsetURL = theName;
+ nsParser::gHackMetaCharset = "";
+ // XXX end of meta tag charset hack
+
CParserContext* pc=new CParserContext(new nsScanner(theName,PR_FALSE, charset, charsetSource),aURL,aListener);
if(pc) {
pc->mMultipart=PR_TRUE;
@@ -594,6 +610,17 @@ nsresult nsParser::Parse(fstream& aStream,PRBool aVerifyEnabled){
//ok, time to create our tokenizer and begin the process
nsAutoString theUnknownFilename("unknown");
+
+ // XXX begin of meta tag charset hack
+ if(theUnknownFilename.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
+ {
+ charset = nsParser::gHackMetaCharset;
+ charsetSource = kCharsetFromMetaTag;
+ }
+ nsParser::gHackMetaCharsetURL = theUnknownFilename;
+ nsParser::gHackMetaCharset = "";
+ // XXX end of meta tag charset hack
+
CParserContext* pc=new CParserContext(new nsScanner(theUnknownFilename,aStream, charset, charsetSource,PR_FALSE),&aStream,0);
if(pc) {
PushContext(*pc);
@@ -645,6 +672,18 @@ nsresult nsParser::Parse(nsString& aSourceBuffer,void* aKey,const nsString& aCon
// XXX We should really put if doc == html for the following line
charset = "ISO-8859-1";
charsetSource = kCharsetFromDocTypeDefault;
+
+ // XXX begin of meta tag charset hack
+ nsAutoString theFakeURL("fromString");
+ if(theFakeURL.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
+ {
+ charset = nsParser::gHackMetaCharset;
+ charsetSource = kCharsetFromMetaTag;
+ }
+ nsParser::gHackMetaCharsetURL = theFakeURL;
+ nsParser::gHackMetaCharset = "";
+ // XXX end of meta tag charset hack
+
//NOTE: Make sure that updates to this method don't cause
// bug #2361 to break again!
diff --git a/mozilla/htmlparser/src/nsParser.h b/mozilla/htmlparser/src/nsParser.h
index c2e0eac61d5..8c78adfd7f6 100644
--- a/mozilla/htmlparser/src/nsParser.h
+++ b/mozilla/htmlparser/src/nsParser.h
@@ -225,6 +225,12 @@ friend class CTokenHandler;
*/
virtual nsITokenizer* GetTokenizer(void);
+ /*
+ * The following two should be removed once our Meta Charset work complete
+ */
+ static nsString gHackMetaCharset;
+ static nsString gHackMetaCharsetURL;
+
protected:
/**
diff --git a/mozilla/parser/htmlparser/src/CNavDTD.cpp b/mozilla/parser/htmlparser/src/CNavDTD.cpp
index 3d8929884a5..225daa642b3 100644
--- a/mozilla/parser/htmlparser/src/CNavDTD.cpp
+++ b/mozilla/parser/htmlparser/src/CNavDTD.cpp
@@ -954,6 +954,8 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode
nsAutoString theCharset;
theValue.Mid(theCharset, charsetValueStart, charsetValueEnd - charsetValueStart);
theScanner->SetDocumentCharset(theCharset, kCharsetFromMetaTag);
+ // XXX this should be delete after META charset really work
+ nsParser::gHackMetaCharset = theCharset;
} //if
} //if
}
diff --git a/mozilla/parser/htmlparser/src/nsParser.cpp b/mozilla/parser/htmlparser/src/nsParser.cpp
index c0d95d0c591..78b7e2fbefa 100644
--- a/mozilla/parser/htmlparser/src/nsParser.cpp
+++ b/mozilla/parser/htmlparser/src/nsParser.cpp
@@ -125,6 +125,9 @@ public:
static CSharedParserObjects* gSharedParserObjects=0;
+nsString nsParser::gHackMetaCharset = "";
+nsString nsParser::gHackMetaCharsetURL = "";
+
//----------------------------------------
/**
@@ -545,6 +548,7 @@ nsresult nsParser::Parse(nsIURL* aURL,nsIStreamObserver* aListener,PRBool aVerif
charsetSource = kCharsetFromDocTypeDefault;
+
nsresult result=kBadURL;
mDTDVerification=aVerifyEnabled;
if(aURL) {
@@ -552,6 +556,18 @@ nsresult nsParser::Parse(nsIURL* aURL,nsIStreamObserver* aListener,PRBool aVerif
nsresult rv = aURL->GetSpec(&spec);
if (rv != NS_OK) return rv;
nsAutoString theName(spec);
+
+ // XXX begin of meta tag charset hack
+
+ if(theName.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
+ {
+ charset = nsParser::gHackMetaCharset;
+ charsetSource = kCharsetFromMetaTag;
+ }
+ nsParser::gHackMetaCharsetURL = theName;
+ nsParser::gHackMetaCharset = "";
+ // XXX end of meta tag charset hack
+
CParserContext* pc=new CParserContext(new nsScanner(theName,PR_FALSE, charset, charsetSource),aURL,aListener);
if(pc) {
pc->mMultipart=PR_TRUE;
@@ -594,6 +610,17 @@ nsresult nsParser::Parse(fstream& aStream,PRBool aVerifyEnabled){
//ok, time to create our tokenizer and begin the process
nsAutoString theUnknownFilename("unknown");
+
+ // XXX begin of meta tag charset hack
+ if(theUnknownFilename.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
+ {
+ charset = nsParser::gHackMetaCharset;
+ charsetSource = kCharsetFromMetaTag;
+ }
+ nsParser::gHackMetaCharsetURL = theUnknownFilename;
+ nsParser::gHackMetaCharset = "";
+ // XXX end of meta tag charset hack
+
CParserContext* pc=new CParserContext(new nsScanner(theUnknownFilename,aStream, charset, charsetSource,PR_FALSE),&aStream,0);
if(pc) {
PushContext(*pc);
@@ -645,6 +672,18 @@ nsresult nsParser::Parse(nsString& aSourceBuffer,void* aKey,const nsString& aCon
// XXX We should really put if doc == html for the following line
charset = "ISO-8859-1";
charsetSource = kCharsetFromDocTypeDefault;
+
+ // XXX begin of meta tag charset hack
+ nsAutoString theFakeURL("fromString");
+ if(theFakeURL.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
+ {
+ charset = nsParser::gHackMetaCharset;
+ charsetSource = kCharsetFromMetaTag;
+ }
+ nsParser::gHackMetaCharsetURL = theFakeURL;
+ nsParser::gHackMetaCharset = "";
+ // XXX end of meta tag charset hack
+
//NOTE: Make sure that updates to this method don't cause
// bug #2361 to break again!
diff --git a/mozilla/parser/htmlparser/src/nsParser.h b/mozilla/parser/htmlparser/src/nsParser.h
index c2e0eac61d5..8c78adfd7f6 100644
--- a/mozilla/parser/htmlparser/src/nsParser.h
+++ b/mozilla/parser/htmlparser/src/nsParser.h
@@ -225,6 +225,12 @@ friend class CTokenHandler;
*/
virtual nsITokenizer* GetTokenizer(void);
+ /*
+ * The following two should be removed once our Meta Charset work complete
+ */
+ static nsString gHackMetaCharset;
+ static nsString gHackMetaCharsetURL;
+
protected:
/**