From fe80ff3c7a4d53f9316b9d6d0a71f4364b7f95f3 Mon Sep 17 00:00:00 2001 From: "bzbarsky%mit.edu" Date: Fri, 21 Apr 2006 01:24:44 +0000 Subject: [PATCH] Make sure documents have a content type at creation time. Bug 311218, r=sicking, sr=jst git-svn-id: svn://10.0.0.236/trunk@195015 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/base/src/nsDocument.cpp | 6 +++++- mozilla/content/base/src/nsDocument.h | 2 +- mozilla/content/html/document/src/nsHTMLDocument.cpp | 9 ++++++++- mozilla/content/xml/document/src/nsXMLDocument.cpp | 5 +++-- mozilla/content/xml/document/src/nsXMLDocument.h | 2 +- mozilla/content/xul/document/src/nsXULDocument.cpp | 6 +++++- 6 files changed, 23 insertions(+), 7 deletions(-) diff --git a/mozilla/content/base/src/nsDocument.cpp b/mozilla/content/base/src/nsDocument.cpp index 94fd41ae1be..506587b0dd1 100644 --- a/mozilla/content/base/src/nsDocument.cpp +++ b/mozilla/content/base/src/nsDocument.cpp @@ -708,10 +708,12 @@ nsDocumentChildNodes::DropReference() // NOTE! nsDocument::operator new() zeroes out all members, so don't // bother initializing members to 0. -nsDocument::nsDocument() +nsDocument::nsDocument(const char* aContentType) : nsIDocument(), mVisible(PR_TRUE) { + mContentType = aContentType; + #ifdef PR_LOGGING if (!gDocumentLeakPRLog) gDocumentLeakPRLog = PR_NewLogModule("DocumentLeak"); @@ -1019,6 +1021,8 @@ nsDocument::ResetToURI(nsIURI *aURI, nsILoadGroup *aLoadGroup) } mLastModified.Truncate(); + // XXXbz I guess we're assuming that the caller will either pass in + // a channel with a useful type or call SetContentType? mContentType.Truncate(); mContentLanguage.Truncate(); mBaseTarget.Truncate(); diff --git a/mozilla/content/base/src/nsDocument.h b/mozilla/content/base/src/nsDocument.h index c320c17dd4f..7a946f97d6c 100644 --- a/mozilla/content/base/src/nsDocument.h +++ b/mozilla/content/base/src/nsDocument.h @@ -729,7 +729,7 @@ protected: void VerifyRootContentState(); #endif - nsDocument(); + nsDocument(const char* aContentType); virtual ~nsDocument(); nsCString mReferrer; diff --git a/mozilla/content/html/document/src/nsHTMLDocument.cpp b/mozilla/content/html/document/src/nsHTMLDocument.cpp index cf6506e828e..86cff7912be 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/content/html/document/src/nsHTMLDocument.cpp @@ -325,7 +325,8 @@ IdAndNameHashInitEntry(PLDHashTable *table, PLDHashEntryHdr *entry, // bother initializing members to 0. nsHTMLDocument::nsHTMLDocument() - : mCompatMode(eCompatibility_NavQuirks), + : nsDocument("text/html"), + mCompatMode(eCompatibility_NavQuirks), mDefaultNamespaceID(kNameSpaceID_None) { @@ -1922,6 +1923,12 @@ nsHTMLDocument::OpenCommon(const nsACString& aContentType, PRBool aReplace) return NS_OK; } + if (!aContentType.EqualsLiteral("text/html") && + !aContentType.EqualsLiteral("text/plain")) { + NS_WARNING("Unsupported type; fix the caller"); + return NS_ERROR_DOM_NOT_SUPPORTED_ERR; + } + nsresult rv = NS_OK; // Note: We want to use GetDocumentFromContext here because this document diff --git a/mozilla/content/xml/document/src/nsXMLDocument.cpp b/mozilla/content/xml/document/src/nsXMLDocument.cpp index 4f20722ec03..6bb4ed9f797 100644 --- a/mozilla/content/xml/document/src/nsXMLDocument.cpp +++ b/mozilla/content/xml/document/src/nsXMLDocument.cpp @@ -183,8 +183,9 @@ NS_NewXMLDocument(nsIDocument** aInstancePtrResult) // NOTE! nsDocument::operator new() zeroes out all members, so don't // bother initializing members to 0. -nsXMLDocument::nsXMLDocument() - : mAsync(PR_TRUE) +nsXMLDocument::nsXMLDocument(const char* aContentType) + : nsDocument(aContentType), + mAsync(PR_TRUE) { // NOTE! nsDocument::operator new() zeroes out all members, so don't diff --git a/mozilla/content/xml/document/src/nsXMLDocument.h b/mozilla/content/xml/document/src/nsXMLDocument.h index 1bbdb80f19e..183b792cd8d 100644 --- a/mozilla/content/xml/document/src/nsXMLDocument.h +++ b/mozilla/content/xml/document/src/nsXMLDocument.h @@ -58,7 +58,7 @@ class nsXMLDocument : public nsDocument, public nsIChannelEventSink { public: - nsXMLDocument(); + nsXMLDocument(const char* aContentType = "application/xml"); virtual ~nsXMLDocument(); NS_DECL_ISUPPORTS_INHERITED diff --git a/mozilla/content/xul/document/src/nsXULDocument.cpp b/mozilla/content/xul/document/src/nsXULDocument.cpp index 68aa67f3009..4fe3fedc021 100644 --- a/mozilla/content/xul/document/src/nsXULDocument.cpp +++ b/mozilla/content/xul/document/src/nsXULDocument.cpp @@ -289,7 +289,8 @@ struct BroadcastListener { // don't bother initializing members to 0. nsXULDocument::nsXULDocument(void) - : mResolutionPhase(nsForwardReference::eStart), + : nsXMLDocument("application/vnd.mozilla.xul+xml"), + mResolutionPhase(nsForwardReference::eStart), mState(eState_Master) { @@ -446,6 +447,9 @@ nsXULDocument::StartDocumentLoad(const char* aCommand, nsIChannel* aChannel, nsIStreamListener **aDocListener, PRBool aReset, nsIContentSink* aSink) { + // NOTE: If this ever starts calling nsDocument::StartDocumentLoad + // we'll possibly need to reset our content type afterwards. + mDocumentLoadGroup = do_GetWeakReference(aLoadGroup); mDocumentTitle.SetIsVoid(PR_TRUE);