From 93bada68b49fefa40139d23bfabecddd54cb3805 Mon Sep 17 00:00:00 2001 From: "ftang%netscape.com" Date: Tue, 27 Apr 1999 21:49:25 +0000 Subject: [PATCH] change S/GetDocumentCharacterSet method for nsIDocument interface. git-svn-id: svn://10.0.0.236/trunk@29531 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/base/public/nsIDocument.h | 4 +-- mozilla/content/base/src/nsDocument.cpp | 14 +++++----- mozilla/content/base/src/nsDocument.h | 6 ++--- .../html/document/src/nsHTMLDocument.cpp | 27 ++++++++++++++----- .../xul/document/src/nsXULDocument.cpp | 21 +++++++++------ mozilla/layout/base/public/nsIDocument.h | 4 +-- mozilla/layout/base/src/nsDocument.cpp | 14 +++++----- mozilla/layout/base/src/nsDocument.h | 6 ++--- .../html/document/src/nsHTMLDocument.cpp | 27 ++++++++++++++----- mozilla/mailnews/base/src/nsMsgAppCore.cpp | 12 ++------- .../mailnews/compose/src/nsComposeAppCore.cpp | 6 +---- mozilla/rdf/content/src/nsXULDocument.cpp | 21 +++++++++------ 12 files changed, 93 insertions(+), 69 deletions(-) diff --git a/mozilla/content/base/public/nsIDocument.h b/mozilla/content/base/public/nsIDocument.h index 112c5294912..1abb8709712 100644 --- a/mozilla/content/base/public/nsIDocument.h +++ b/mozilla/content/base/public/nsIDocument.h @@ -114,8 +114,8 @@ public: * Return a standard name for the document's character set. This will * trigger a startDocumentLoad if necessary to answer the question. */ - virtual nsString* GetDocumentCharacterSet() const = 0; - virtual void SetDocumentCharacterSet(nsString* aCharSetID) = 0; + NS_IMETHOD GetDocumentCharacterSet(nsString& oCharSetID) = 0; + NS_IMETHOD SetDocumentCharacterSet(const nsString& aCharSetID) = 0; /** * Return the Line Breaker for the document diff --git a/mozilla/content/base/src/nsDocument.cpp b/mozilla/content/base/src/nsDocument.cpp index 9b42c976500..ffa4c611047 100644 --- a/mozilla/content/base/src/nsDocument.cpp +++ b/mozilla/content/base/src/nsDocument.cpp @@ -615,7 +615,7 @@ nsDocument::nsDocument() mDocumentTitle = nsnull; mDocumentURL = nsnull; mDocumentURLGroup = nsnull; - mCharacterSet = nsnull; + mCharacterSet = "ISO-8859-1"; mParentDocument = nsnull; mRootContent = nsnull; mScriptObject = nsnull; @@ -902,14 +902,16 @@ nsDocument::GetBaseURL(nsIURL*& aURL) const return NS_OK; } -nsString* nsDocument::GetDocumentCharacterSet() const +NS_IMETHODIMP nsDocument::GetDocumentCharacterSet(nsString& oCharSetID) { - return mCharacterSet; + oCharSetID = mCharacterSet; + return NS_OK; } -void nsDocument::SetDocumentCharacterSet(nsString* aCharSetID) +NS_IMETHODIMP nsDocument::SetDocumentCharacterSet(const nsString& aCharSetID) { mCharacterSet = aCharSetID; + return NS_OK; } NS_IMETHODIMP nsDocument::GetLineBreaker(nsILineBreaker** aResult) @@ -2621,9 +2623,7 @@ void nsDocument::CreateXIF(nsString & aBuffer, nsIDOMSelection* aSelection) converter.AddStartTag("section"); converter.AddStartTag("section_head"); - nsString charset = "ISO-8859-1"; - if (mCharacterSet != nsnull) - charset = *mCharacterSet; + nsString charset = mCharacterSet; converter.BeginStartTag("document_info"); converter.AddAttribute(nsString("charset"),charset); diff --git a/mozilla/content/base/src/nsDocument.h b/mozilla/content/base/src/nsDocument.h index 4c3ce7954a6..e442e604edc 100644 --- a/mozilla/content/base/src/nsDocument.h +++ b/mozilla/content/base/src/nsDocument.h @@ -137,8 +137,8 @@ public: * Return a standard name for the document's character set. This will * trigger a startDocumentLoad if necessary to answer the question. */ - virtual nsString* GetDocumentCharacterSet() const; - virtual void SetDocumentCharacterSet(nsString* aCharSetID); + NS_IMETHOD GetDocumentCharacterSet(nsString& oCharsetID); + NS_IMETHOD SetDocumentCharacterSet(const nsString& aCharSetID); /** * Return the Line Breaker for the document @@ -401,7 +401,7 @@ protected: nsString* mDocumentTitle; nsIURL* mDocumentURL; nsIURLGroup* mDocumentURLGroup; - nsString* mCharacterSet; + nsString mCharacterSet; nsIDocument* mParentDocument; nsVoidArray mSubDocuments; nsVoidArray mPresShells; diff --git a/mozilla/content/html/document/src/nsHTMLDocument.cpp b/mozilla/content/html/document/src/nsHTMLDocument.cpp index 192e6380213..af39ccd1921 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/content/html/document/src/nsHTMLDocument.cpp @@ -289,7 +289,7 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL, if (NS_OK == rv) { nsIHTMLContentSink* sink; - nsAutoString defaultHTMLCharset = "ISO-8859-1"; // fallback value in case webShell return error + nsAutoString charset = "ISO-8859-1"; // fallback value in case webShell return error nsCharsetSource charsetSource = kCharsetFromDocTypeDefault; @@ -299,15 +299,28 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL, NS_PRECONDITION(nsnull != aContainer, "No content viewer container"); aContainer->QueryInterface(kIWebShellIID, (void**)&webShell); rv = NS_NewHTMLContentSink(&sink, this, aURL, webShell); - if (NS_OK == rv) { - const PRUnichar* defaultFromWebShell = NULL; - rv = webShell->GetDefaultCharacterSet(&defaultFromWebShell); - defaultHTMLCharset = defaultFromWebShell; - charsetSource = kCharsetFromUserDefault; + + if (NS_SUCCEEDED(rv)) { + const PRUnichar* defaultCharsetFromWebShell = NULL; + rv = webShell->GetDefaultCharacterSet(&defaultCharsetFromWebShell); + if(NS_SUCCEEDED(rv)) { + charset = defaultCharsetFromWebShell; + charsetSource = kCharsetFromUserDefault; + } } NS_IF_RELEASE(webShell); #endif + // 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); + } + if (NS_OK == rv) { // Set the parser as the stream listener for the document loader... static NS_DEFINE_IID(kIStreamListenerIID, NS_ISTREAMLISTENER_IID); @@ -323,7 +336,7 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL, // nsIDTD* theDTD=0; // NS_NewNavHTMLDTD(&theDTD); // mParser->RegisterDTD(theDTD); - mParser->SetDocumentCharset( defaultHTMLCharset, charsetSource); + mParser->SetDocumentCharset( charset, charsetSource); mParser->SetCommand(aCommand); mParser->SetContentSink(sink); mParser->Parse(aURL); diff --git a/mozilla/content/xul/document/src/nsXULDocument.cpp b/mozilla/content/xul/document/src/nsXULDocument.cpp index 93984fb7833..3d991d9f265 100644 --- a/mozilla/content/xul/document/src/nsXULDocument.cpp +++ b/mozilla/content/xul/document/src/nsXULDocument.cpp @@ -399,9 +399,9 @@ public: NS_IMETHOD GetBaseURL(nsIURL*& aURL) const; - virtual nsString* GetDocumentCharacterSet() const; + NS_IMETHOD GetDocumentCharacterSet(nsString& oCharSetID); - virtual void SetDocumentCharacterSet(nsString* aCharSetID); + NS_IMETHOD SetDocumentCharacterSet(const nsString& aCharSetID); NS_IMETHOD GetLineBreaker(nsILineBreaker** aResult) ; NS_IMETHOD SetLineBreaker(nsILineBreaker* aLineBreaker) ; @@ -687,7 +687,7 @@ protected: nsIDocument* mParentDocument; nsIScriptContextOwner* mScriptContextOwner; void* mScriptObject; - nsString* mCharSetID; + nsString mCharSetID; nsVoidArray mStyleSheets; nsIDOMSelection* mSelection; PRBool mDisplaySelection; @@ -736,6 +736,7 @@ XULDocumentImpl::XULDocumentImpl(void) mXULBuilder(nsnull), mLocalDataSource(nsnull), mDocumentDataSource(nsnull), + mCharSetID("UTF-8"), mLineBreaker(nsnull), mWordBreaker(nsnull), mContentViewerContainer(nsnull), @@ -1190,6 +1191,8 @@ XULDocumentImpl::PrepareToLoad( nsCOMPtr* created_parser, parser->RegisterDTD(dtd); parser->SetCommand(aCommand); + nsAutoString utf8("UTF-8"); + parser->SetDocumentCharset(utf8, kCharsetFromDocTypeDefault); parser->SetContentSink(sink); // grabs a reference to the parser *created_parser = parser; @@ -1271,16 +1274,18 @@ XULDocumentImpl::GetBaseURL(nsIURL*& aURL) const return NS_OK; } -nsString* -XULDocumentImpl::GetDocumentCharacterSet() const +NS_IMETHODIMP +XULDocumentImpl::GetDocumentCharacterSet(nsString& oCharSetID) { - return mCharSetID; + oCharSetID = mCharSetID; + return NS_OK; } -void -XULDocumentImpl::SetDocumentCharacterSet(nsString* aCharSetID) +NS_IMETHODIMP +XULDocumentImpl::SetDocumentCharacterSet(const nsString& aCharSetID) { mCharSetID = aCharSetID; + return NS_OK; } diff --git a/mozilla/layout/base/public/nsIDocument.h b/mozilla/layout/base/public/nsIDocument.h index 112c5294912..1abb8709712 100644 --- a/mozilla/layout/base/public/nsIDocument.h +++ b/mozilla/layout/base/public/nsIDocument.h @@ -114,8 +114,8 @@ public: * Return a standard name for the document's character set. This will * trigger a startDocumentLoad if necessary to answer the question. */ - virtual nsString* GetDocumentCharacterSet() const = 0; - virtual void SetDocumentCharacterSet(nsString* aCharSetID) = 0; + NS_IMETHOD GetDocumentCharacterSet(nsString& oCharSetID) = 0; + NS_IMETHOD SetDocumentCharacterSet(const nsString& aCharSetID) = 0; /** * Return the Line Breaker for the document diff --git a/mozilla/layout/base/src/nsDocument.cpp b/mozilla/layout/base/src/nsDocument.cpp index 9b42c976500..ffa4c611047 100644 --- a/mozilla/layout/base/src/nsDocument.cpp +++ b/mozilla/layout/base/src/nsDocument.cpp @@ -615,7 +615,7 @@ nsDocument::nsDocument() mDocumentTitle = nsnull; mDocumentURL = nsnull; mDocumentURLGroup = nsnull; - mCharacterSet = nsnull; + mCharacterSet = "ISO-8859-1"; mParentDocument = nsnull; mRootContent = nsnull; mScriptObject = nsnull; @@ -902,14 +902,16 @@ nsDocument::GetBaseURL(nsIURL*& aURL) const return NS_OK; } -nsString* nsDocument::GetDocumentCharacterSet() const +NS_IMETHODIMP nsDocument::GetDocumentCharacterSet(nsString& oCharSetID) { - return mCharacterSet; + oCharSetID = mCharacterSet; + return NS_OK; } -void nsDocument::SetDocumentCharacterSet(nsString* aCharSetID) +NS_IMETHODIMP nsDocument::SetDocumentCharacterSet(const nsString& aCharSetID) { mCharacterSet = aCharSetID; + return NS_OK; } NS_IMETHODIMP nsDocument::GetLineBreaker(nsILineBreaker** aResult) @@ -2621,9 +2623,7 @@ void nsDocument::CreateXIF(nsString & aBuffer, nsIDOMSelection* aSelection) converter.AddStartTag("section"); converter.AddStartTag("section_head"); - nsString charset = "ISO-8859-1"; - if (mCharacterSet != nsnull) - charset = *mCharacterSet; + nsString charset = mCharacterSet; converter.BeginStartTag("document_info"); converter.AddAttribute(nsString("charset"),charset); diff --git a/mozilla/layout/base/src/nsDocument.h b/mozilla/layout/base/src/nsDocument.h index 4c3ce7954a6..e442e604edc 100644 --- a/mozilla/layout/base/src/nsDocument.h +++ b/mozilla/layout/base/src/nsDocument.h @@ -137,8 +137,8 @@ public: * Return a standard name for the document's character set. This will * trigger a startDocumentLoad if necessary to answer the question. */ - virtual nsString* GetDocumentCharacterSet() const; - virtual void SetDocumentCharacterSet(nsString* aCharSetID); + NS_IMETHOD GetDocumentCharacterSet(nsString& oCharsetID); + NS_IMETHOD SetDocumentCharacterSet(const nsString& aCharSetID); /** * Return the Line Breaker for the document @@ -401,7 +401,7 @@ protected: nsString* mDocumentTitle; nsIURL* mDocumentURL; nsIURLGroup* mDocumentURLGroup; - nsString* mCharacterSet; + nsString mCharacterSet; nsIDocument* mParentDocument; nsVoidArray mSubDocuments; nsVoidArray mPresShells; diff --git a/mozilla/layout/html/document/src/nsHTMLDocument.cpp b/mozilla/layout/html/document/src/nsHTMLDocument.cpp index 192e6380213..af39ccd1921 100644 --- a/mozilla/layout/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/layout/html/document/src/nsHTMLDocument.cpp @@ -289,7 +289,7 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL, if (NS_OK == rv) { nsIHTMLContentSink* sink; - nsAutoString defaultHTMLCharset = "ISO-8859-1"; // fallback value in case webShell return error + nsAutoString charset = "ISO-8859-1"; // fallback value in case webShell return error nsCharsetSource charsetSource = kCharsetFromDocTypeDefault; @@ -299,15 +299,28 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL, NS_PRECONDITION(nsnull != aContainer, "No content viewer container"); aContainer->QueryInterface(kIWebShellIID, (void**)&webShell); rv = NS_NewHTMLContentSink(&sink, this, aURL, webShell); - if (NS_OK == rv) { - const PRUnichar* defaultFromWebShell = NULL; - rv = webShell->GetDefaultCharacterSet(&defaultFromWebShell); - defaultHTMLCharset = defaultFromWebShell; - charsetSource = kCharsetFromUserDefault; + + if (NS_SUCCEEDED(rv)) { + const PRUnichar* defaultCharsetFromWebShell = NULL; + rv = webShell->GetDefaultCharacterSet(&defaultCharsetFromWebShell); + if(NS_SUCCEEDED(rv)) { + charset = defaultCharsetFromWebShell; + charsetSource = kCharsetFromUserDefault; + } } NS_IF_RELEASE(webShell); #endif + // 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); + } + if (NS_OK == rv) { // Set the parser as the stream listener for the document loader... static NS_DEFINE_IID(kIStreamListenerIID, NS_ISTREAMLISTENER_IID); @@ -323,7 +336,7 @@ nsHTMLDocument::StartDocumentLoad(nsIURL *aURL, // nsIDTD* theDTD=0; // NS_NewNavHTMLDTD(&theDTD); // mParser->RegisterDTD(theDTD); - mParser->SetDocumentCharset( defaultHTMLCharset, charsetSource); + mParser->SetDocumentCharset( charset, charsetSource); mParser->SetCommand(aCommand); mParser->SetContentSink(sink); mParser->Parse(aURL); diff --git a/mozilla/mailnews/base/src/nsMsgAppCore.cpp b/mozilla/mailnews/base/src/nsMsgAppCore.cpp index 8dba8fd8a2f..a56a35ac2bd 100644 --- a/mozilla/mailnews/base/src/nsMsgAppCore.cpp +++ b/mozilla/mailnews/base/src/nsMsgAppCore.cpp @@ -231,11 +231,7 @@ nsresult nsMsgAppCore::SetDocumentCharset(class nsString const & aCharset) res = domDoc->QueryInterface(nsIDocument::GetIID(), (void**)&doc); if (NS_SUCCEEDED(res) && nsnull != doc) { - nsString *aNewCharset = new nsString(aCharset); - if (nsnull != aNewCharset) - { - doc->SetDocumentCharacterSet(aNewCharset); - } + doc->SetDocumentCharacterSet(aCharset); NS_RELEASE(doc); } @@ -252,11 +248,7 @@ nsresult nsMsgAppCore::SetDocumentCharset(class nsString const & aCharset) // Get the document object nsCOMPtr doc; if (NS_SUCCEEDED(res = docViewer->GetDocument(*getter_AddRefs(doc)))) { - nsString *aNewCharset = new nsString(aCharset); - if (nsnull != aNewCharset) - { - doc->SetDocumentCharacterSet(aNewCharset); - } + doc->SetDocumentCharacterSet(aCharset); } } } diff --git a/mozilla/mailnews/compose/src/nsComposeAppCore.cpp b/mozilla/mailnews/compose/src/nsComposeAppCore.cpp index 5178d90cd5b..9d88822e48d 100644 --- a/mozilla/mailnews/compose/src/nsComposeAppCore.cpp +++ b/mozilla/mailnews/compose/src/nsComposeAppCore.cpp @@ -355,11 +355,7 @@ nsresult nsComposeAppCore::SetDocumentCharset(class nsString const & aCharset) res = domDoc->QueryInterface(kIDocumentIID,(void**)&doc); if (NS_SUCCEEDED(res) && nsnull != doc) { - nsString *aNewCharset = new nsString(aCharset); - if (nsnull != aNewCharset) - { - doc->SetDocumentCharacterSet(aNewCharset); - } + doc->SetDocumentCharacterSet(aCharset); NS_RELEASE(doc); } diff --git a/mozilla/rdf/content/src/nsXULDocument.cpp b/mozilla/rdf/content/src/nsXULDocument.cpp index 93984fb7833..3d991d9f265 100644 --- a/mozilla/rdf/content/src/nsXULDocument.cpp +++ b/mozilla/rdf/content/src/nsXULDocument.cpp @@ -399,9 +399,9 @@ public: NS_IMETHOD GetBaseURL(nsIURL*& aURL) const; - virtual nsString* GetDocumentCharacterSet() const; + NS_IMETHOD GetDocumentCharacterSet(nsString& oCharSetID); - virtual void SetDocumentCharacterSet(nsString* aCharSetID); + NS_IMETHOD SetDocumentCharacterSet(const nsString& aCharSetID); NS_IMETHOD GetLineBreaker(nsILineBreaker** aResult) ; NS_IMETHOD SetLineBreaker(nsILineBreaker* aLineBreaker) ; @@ -687,7 +687,7 @@ protected: nsIDocument* mParentDocument; nsIScriptContextOwner* mScriptContextOwner; void* mScriptObject; - nsString* mCharSetID; + nsString mCharSetID; nsVoidArray mStyleSheets; nsIDOMSelection* mSelection; PRBool mDisplaySelection; @@ -736,6 +736,7 @@ XULDocumentImpl::XULDocumentImpl(void) mXULBuilder(nsnull), mLocalDataSource(nsnull), mDocumentDataSource(nsnull), + mCharSetID("UTF-8"), mLineBreaker(nsnull), mWordBreaker(nsnull), mContentViewerContainer(nsnull), @@ -1190,6 +1191,8 @@ XULDocumentImpl::PrepareToLoad( nsCOMPtr* created_parser, parser->RegisterDTD(dtd); parser->SetCommand(aCommand); + nsAutoString utf8("UTF-8"); + parser->SetDocumentCharset(utf8, kCharsetFromDocTypeDefault); parser->SetContentSink(sink); // grabs a reference to the parser *created_parser = parser; @@ -1271,16 +1274,18 @@ XULDocumentImpl::GetBaseURL(nsIURL*& aURL) const return NS_OK; } -nsString* -XULDocumentImpl::GetDocumentCharacterSet() const +NS_IMETHODIMP +XULDocumentImpl::GetDocumentCharacterSet(nsString& oCharSetID) { - return mCharSetID; + oCharSetID = mCharSetID; + return NS_OK; } -void -XULDocumentImpl::SetDocumentCharacterSet(nsString* aCharSetID) +NS_IMETHODIMP +XULDocumentImpl::SetDocumentCharacterSet(const nsString& aCharSetID) { mCharSetID = aCharSetID; + return NS_OK; }