From ac454a233fe7389cfd95caa0381eaf0de3a38c36 Mon Sep 17 00:00:00 2001 From: Olli Pettay Date: Tue, 4 May 2010 12:46:37 +0300 Subject: [PATCH] backout Bug 562321 --- content/base/public/nsIContentSerializer.h | 31 ++--- content/base/src/mozSanitizingSerializer.cpp | 16 +-- content/base/src/mozSanitizingSerializer.h | 18 +-- content/base/src/nsDocumentEncoder.cpp | 36 +++--- content/base/src/nsHTMLContentSerializer.cpp | 19 ++-- content/base/src/nsHTMLContentSerializer.h | 10 +- content/base/src/nsPlainTextSerializer.cpp | 22 ++-- content/base/src/nsPlainTextSerializer.h | 18 +-- content/base/src/nsXHTMLContentSerializer.cpp | 19 ++-- content/base/src/nsXHTMLContentSerializer.h | 14 +-- content/base/src/nsXMLContentSerializer.cpp | 106 ++++++++++-------- content/base/src/nsXMLContentSerializer.h | 38 +++---- 12 files changed, 189 insertions(+), 158 deletions(-) diff --git a/content/base/public/nsIContentSerializer.h b/content/base/public/nsIContentSerializer.h index e01a1d9e3edd..367c0ba94b16 100644 --- a/content/base/public/nsIContentSerializer.h +++ b/content/base/public/nsIContentSerializer.h @@ -40,15 +40,20 @@ #include "nsISupports.h" -class nsIContent; -class nsIDocument; +class nsIDOMText; /* forward declaration */ +class nsIDOMCDATASection; /* forward declaration */ +class nsIDOMProcessingInstruction; /* forward declaration */ +class nsIDOMComment; /* forward declaration */ +class nsIDOMDocumentType; /* forward declaration */ +class nsIDOMElement; /* forward declaration */ +class nsIDOMDocument; /* forward declaration */ class nsAString; /* starting interface: nsIContentSerializer */ #define NS_ICONTENTSERIALIZER_IID \ -{ 0xb1ee32f2, 0xb8c4, 0x49b9, \ - { 0x93, 0xdf, 0xb6, 0xfa, 0xb5, 0xd5, 0x46, 0x88 } } +{ 0x34769de0, 0x30d0, 0x4cef, \ + { 0x89, 0x4a, 0xfc, 0xd8, 0xbb, 0x27, 0xc4, 0xb4 } } class nsIContentSerializer : public nsISupports { public: @@ -59,29 +64,29 @@ class nsIContentSerializer : public nsISupports { const char* aCharSet, PRBool aIsCopying, PRBool aIsWholeDocument) = 0; - NS_IMETHOD AppendText(nsIContent* aText, PRInt32 aStartOffset, + NS_IMETHOD AppendText(nsIDOMText* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) = 0; - NS_IMETHOD AppendCDATASection(nsIContent* aCDATASection, + NS_IMETHOD AppendCDATASection(nsIDOMCDATASection* aCDATASection, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) = 0; - NS_IMETHOD AppendProcessingInstruction(nsIContent* aPI, + NS_IMETHOD AppendProcessingInstruction(nsIDOMProcessingInstruction* aPI, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) = 0; - NS_IMETHOD AppendComment(nsIContent* aComment, PRInt32 aStartOffset, + NS_IMETHOD AppendComment(nsIDOMComment* aComment, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) = 0; - NS_IMETHOD AppendDoctype(nsIContent *aDoctype, + NS_IMETHOD AppendDoctype(nsIDOMDocumentType *aDoctype, nsAString& aStr) = 0; - NS_IMETHOD AppendElementStart(nsIContent *aElement, - nsIContent *aOriginalElement, + NS_IMETHOD AppendElementStart(nsIDOMElement *aElement, + nsIDOMElement *aOriginalElement, nsAString& aStr) = 0; - NS_IMETHOD AppendElementEnd(nsIContent *aElement, + NS_IMETHOD AppendElementEnd(nsIDOMElement *aElement, nsAString& aStr) = 0; NS_IMETHOD Flush(nsAString& aStr) = 0; @@ -91,7 +96,7 @@ class nsIContentSerializer : public nsISupports { * serialized by other methods. XML declaration is the most likely * thing this method can produce. */ - NS_IMETHOD AppendDocumentStart(nsIDocument *aDocument, + NS_IMETHOD AppendDocumentStart(nsIDOMDocument *aDocument, nsAString& aStr) = 0; }; diff --git a/content/base/src/mozSanitizingSerializer.cpp b/content/base/src/mozSanitizingSerializer.cpp index 8decb9848f20..07a5f319077e 100644 --- a/content/base/src/mozSanitizingSerializer.cpp +++ b/content/base/src/mozSanitizingSerializer.cpp @@ -165,7 +165,7 @@ mozSanitizingHTMLSerializer::Flush(nsAString& aStr) } NS_IMETHODIMP -mozSanitizingHTMLSerializer::AppendDocumentStart(nsIDocument *aDocument, +mozSanitizingHTMLSerializer::AppendDocumentStart(nsIDOMDocument *aDocument, nsAString& aStr) { return NS_OK; @@ -225,7 +225,7 @@ mozSanitizingHTMLSerializer::GetIdForContent(nsIContent* aContent) } NS_IMETHODIMP -mozSanitizingHTMLSerializer::AppendText(nsIContent* aText, +mozSanitizingHTMLSerializer::AppendText(nsIDOMText* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) @@ -241,13 +241,14 @@ mozSanitizingHTMLSerializer::AppendText(nsIContent* aText, } NS_IMETHODIMP -mozSanitizingHTMLSerializer::AppendElementStart(nsIContent *aElement, - nsIContent *aOriginalElement, +mozSanitizingHTMLSerializer::AppendElementStart(nsIDOMElement *aElement, + nsIDOMElement *aOriginalElement, nsAString& aStr) { NS_ENSURE_ARG(aElement); - mContent = aElement; + mContent = do_QueryInterface(aElement); + NS_ENSURE_TRUE(mContent, NS_ERROR_FAILURE); mOutputString = &aStr; @@ -270,12 +271,13 @@ mozSanitizingHTMLSerializer::AppendElementStart(nsIContent *aElement, } NS_IMETHODIMP -mozSanitizingHTMLSerializer::AppendElementEnd(nsIContent *aElement, +mozSanitizingHTMLSerializer::AppendElementEnd(nsIDOMElement *aElement, nsAString& aStr) { NS_ENSURE_ARG(aElement); - mContent = aElement; + mContent = do_QueryInterface(aElement); + NS_ENSURE_TRUE(mContent, NS_ERROR_FAILURE); mOutputString = &aStr; diff --git a/content/base/src/mozSanitizingSerializer.h b/content/base/src/mozSanitizingSerializer.h index 9fd78a2b3392..3a336f3d5fa8 100644 --- a/content/base/src/mozSanitizingSerializer.h +++ b/content/base/src/mozSanitizingSerializer.h @@ -73,29 +73,29 @@ public: NS_IMETHOD Init(PRUint32 flags, PRUint32 dummy, const char* aCharSet, PRBool aIsCopying, PRBool aIsWholeDocument); - NS_IMETHOD AppendText(nsIContent* aText, PRInt32 aStartOffset, + NS_IMETHOD AppendText(nsIDOMText* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr); - NS_IMETHOD AppendCDATASection(nsIContent* aCDATASection, + NS_IMETHOD AppendCDATASection(nsIDOMCDATASection* aCDATASection, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) { return NS_OK; } - NS_IMETHOD AppendProcessingInstruction(nsIContent* aPI, + NS_IMETHOD AppendProcessingInstruction(nsIDOMProcessingInstruction* aPI, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) { return NS_OK; } - NS_IMETHOD AppendComment(nsIContent* aComment, PRInt32 aStartOffset, + NS_IMETHOD AppendComment(nsIDOMComment* aComment, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) { return NS_OK; } - NS_IMETHOD AppendDoctype(nsIContent *aDoctype, nsAString& aStr) + NS_IMETHOD AppendDoctype(nsIDOMDocumentType *aDoctype, nsAString& aStr) { return NS_OK; } - NS_IMETHOD AppendElementStart(nsIContent *aElement, - nsIContent *aOriginalElement, + NS_IMETHOD AppendElementStart(nsIDOMElement *aElement, + nsIDOMElement *aOriginalElement, nsAString& aStr); - NS_IMETHOD AppendElementEnd(nsIContent *aElement, nsAString& aStr); + NS_IMETHOD AppendElementEnd(nsIDOMElement *aElement, nsAString& aStr); NS_IMETHOD Flush(nsAString& aStr); - NS_IMETHOD AppendDocumentStart(nsIDocument *aDocument, + NS_IMETHOD AppendDocumentStart(nsIDOMDocument *aDocument, nsAString& aStr); // nsIContentSink diff --git a/content/base/src/nsDocumentEncoder.cpp b/content/base/src/nsDocumentEncoder.cpp index 88669ed3e37d..072929a597bb 100644 --- a/content/base/src/nsDocumentEncoder.cpp +++ b/content/base/src/nsDocumentEncoder.cpp @@ -292,44 +292,45 @@ nsDocumentEncoder::SerializeNodeStart(nsINode* aNode, if (!node) node = aNode; + //XXX Remove QIing to nsIDOM* when fixing bug 562321. node->GetNodeType(&type); switch (type) { case nsIDOMNode::ELEMENT_NODE: { - nsIContent* originalElement = - aOriginalNode && aOriginalNode->IsElement() ? - static_cast(aOriginalNode) : nsnull; - mSerializer->AppendElementStart(static_cast(node), - originalElement, aStr); + nsCOMPtr element = do_QueryInterface(node); + nsCOMPtr originalElement = do_QueryInterface(aOriginalNode); + mSerializer->AppendElementStart(element, originalElement, aStr); break; } case nsIDOMNode::TEXT_NODE: { - mSerializer->AppendText(static_cast(node), - aStartOffset, aEndOffset, aStr); + nsCOMPtr text = do_QueryInterface(node); + mSerializer->AppendText(text, aStartOffset, aEndOffset, aStr); break; } case nsIDOMNode::CDATA_SECTION_NODE: { - mSerializer->AppendCDATASection(static_cast(node), - aStartOffset, aEndOffset, aStr); + nsCOMPtr cdata = do_QueryInterface(node); + mSerializer->AppendCDATASection(cdata, aStartOffset, aEndOffset, aStr); break; } case nsIDOMNode::PROCESSING_INSTRUCTION_NODE: { - mSerializer->AppendProcessingInstruction(static_cast(node), - aStartOffset, aEndOffset, aStr); + nsCOMPtr pi = do_QueryInterface(node); + mSerializer->AppendProcessingInstruction(pi, aStartOffset, aEndOffset, + aStr); break; } case nsIDOMNode::COMMENT_NODE: { - mSerializer->AppendComment(static_cast(node), - aStartOffset, aEndOffset, aStr); + nsCOMPtr comment = do_QueryInterface(node); + mSerializer->AppendComment(comment, aStartOffset, aEndOffset, aStr); break; } case nsIDOMNode::DOCUMENT_TYPE_NODE: { - mSerializer->AppendDoctype(static_cast(node), aStr); + nsCOMPtr doctype = do_QueryInterface(node); + mSerializer->AppendDoctype(doctype, aStr); break; } } @@ -341,8 +342,10 @@ nsresult nsDocumentEncoder::SerializeNodeEnd(nsINode* aNode, nsAString& aStr) { + //XXX Remove QIing to nsIDOM* when fixing bug 562321. if (aNode->IsElement()) { - mSerializer->AppendElementEnd(static_cast(aNode), aStr); + nsCOMPtr element = do_QueryInterface(aNode); + mSerializer->AppendElementEnd(element, aStr); } return NS_OK; } @@ -950,7 +953,8 @@ nsDocumentEncoder::EncodeToString(nsAString& aOutputString) rv = SerializeToStringRecursive(mNode, aOutputString, mNodeIsContainer); mNode = nsnull; } else { - rv = mSerializer->AppendDocumentStart(mDocument, aOutputString); + nsCOMPtr domdoc(do_QueryInterface(mDocument)); + rv = mSerializer->AppendDocumentStart(domdoc, aOutputString); if (NS_SUCCEEDED(rv)) { rv = SerializeToStringRecursive(mDocument, aOutputString, PR_FALSE); diff --git a/content/base/src/nsHTMLContentSerializer.cpp b/content/base/src/nsHTMLContentSerializer.cpp index 85d9b0cc93f9..ddc253cfc181 100644 --- a/content/base/src/nsHTMLContentSerializer.cpp +++ b/content/base/src/nsHTMLContentSerializer.cpp @@ -92,7 +92,7 @@ nsHTMLContentSerializer::~nsHTMLContentSerializer() NS_IMETHODIMP -nsHTMLContentSerializer::AppendDocumentStart(nsIDocument *aDocument, +nsHTMLContentSerializer::AppendDocumentStart(nsIDOMDocument *aDocument, nsAString& aStr) { return NS_OK; @@ -100,7 +100,7 @@ nsHTMLContentSerializer::AppendDocumentStart(nsIDocument *aDocument, void nsHTMLContentSerializer::SerializeHTMLAttributes(nsIContent* aContent, - nsIContent *aOriginalElement, + nsIDOMElement *aOriginalElement, nsAString& aTagPrefix, const nsAString& aTagNamespaceURI, nsIAtom* aTagName, @@ -190,13 +190,14 @@ nsHTMLContentSerializer::SerializeHTMLAttributes(nsIContent* aContent, } NS_IMETHODIMP -nsHTMLContentSerializer::AppendElementStart(nsIContent *aElement, - nsIContent *aOriginalElement, +nsHTMLContentSerializer::AppendElementStart(nsIDOMElement *aElement, + nsIDOMElement *aOriginalElement, nsAString& aStr) { NS_ENSURE_ARG(aElement); - nsIContent* content = aElement; + nsCOMPtr content = do_QueryInterface(aElement); + if (!content) return NS_ERROR_FAILURE; PRBool forceFormat = PR_FALSE; if (!CheckElementStart(content, forceFormat, aStr)) { @@ -249,8 +250,7 @@ nsHTMLContentSerializer::AppendElementStart(nsIContent *aElement, // Store its start attribute value in olState->startVal. nsAutoString start; PRInt32 startAttrVal = 0; - - aElement->GetAttr(kNameSpaceID_None, nsGkAtoms::start, start); + aElement->GetAttribute(NS_LITERAL_STRING("start"), start); if (!start.IsEmpty()){ PRInt32 rv = 0; startAttrVal = start.ToInteger(&rv); @@ -298,12 +298,13 @@ nsHTMLContentSerializer::AppendElementStart(nsIContent *aElement, } NS_IMETHODIMP -nsHTMLContentSerializer::AppendElementEnd(nsIContent *aElement, +nsHTMLContentSerializer::AppendElementEnd(nsIDOMElement *aElement, nsAString& aStr) { NS_ENSURE_ARG(aElement); - nsIContent* content = aElement; + nsCOMPtr content = do_QueryInterface(aElement); + if (!content) return NS_ERROR_FAILURE; nsIAtom *name = content->Tag(); diff --git a/content/base/src/nsHTMLContentSerializer.h b/content/base/src/nsHTMLContentSerializer.h index 43e4a7eae9ac..a2dc7cf4bd94 100644 --- a/content/base/src/nsHTMLContentSerializer.h +++ b/content/base/src/nsHTMLContentSerializer.h @@ -57,19 +57,19 @@ class nsHTMLContentSerializer : public nsXHTMLContentSerializer { nsHTMLContentSerializer(); virtual ~nsHTMLContentSerializer(); - NS_IMETHOD AppendElementStart(nsIContent *aElement, - nsIContent *aOriginalElement, + NS_IMETHOD AppendElementStart(nsIDOMElement *aElement, + nsIDOMElement *aOriginalElement, nsAString& aStr); - NS_IMETHOD AppendElementEnd(nsIContent *aElement, + NS_IMETHOD AppendElementEnd(nsIDOMElement *aElement, nsAString& aStr); - NS_IMETHOD AppendDocumentStart(nsIDocument *aDocument, + NS_IMETHOD AppendDocumentStart(nsIDOMDocument *aDocument, nsAString& aStr); protected: virtual void SerializeHTMLAttributes(nsIContent* aContent, - nsIContent *aOriginalElement, + nsIDOMElement *aOriginalElement, nsAString& aTagPrefix, const nsAString& aTagNamespaceURI, nsIAtom* aTagName, diff --git a/content/base/src/nsPlainTextSerializer.cpp b/content/base/src/nsPlainTextSerializer.cpp index c262208535fc..8cfc87a38342 100644 --- a/content/base/src/nsPlainTextSerializer.cpp +++ b/content/base/src/nsPlainTextSerializer.cpp @@ -290,7 +290,7 @@ nsPlainTextSerializer::Initialize(nsAString* aOutString, } NS_IMETHODIMP -nsPlainTextSerializer::AppendText(nsIContent* aText, +nsPlainTextSerializer::AppendText(nsIDOMText* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) @@ -309,7 +309,7 @@ nsPlainTextSerializer::AppendText(nsIContent* aText, PRInt32 length = 0; nsAutoString textstr; - nsIContent* content = aText; + nsCOMPtr content = do_QueryInterface(aText); const nsTextFragment* frag; if (!content || !(frag = content->GetText())) { return NS_ERROR_FAILURE; @@ -372,7 +372,7 @@ nsPlainTextSerializer::AppendText(nsIContent* aText, } NS_IMETHODIMP -nsPlainTextSerializer::AppendCDATASection(nsIContent* aCDATASection, +nsPlainTextSerializer::AppendCDATASection(nsIDOMCDATASection* aCDATASection, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) @@ -381,13 +381,14 @@ nsPlainTextSerializer::AppendCDATASection(nsIContent* aCDATASection, } NS_IMETHODIMP -nsPlainTextSerializer::AppendElementStart(nsIContent *aElement, - nsIContent *aOriginalElement, +nsPlainTextSerializer::AppendElementStart(nsIDOMElement *aElement, + nsIDOMElement *aOriginalElement, nsAString& aStr) { NS_ENSURE_ARG(aElement); - mContent = aElement; + mContent = do_QueryInterface(aElement); + if (!mContent) return NS_ERROR_FAILURE; nsresult rv; PRInt32 id = GetIdForContent(mContent); @@ -414,12 +415,13 @@ nsPlainTextSerializer::AppendElementStart(nsIContent *aElement, } NS_IMETHODIMP -nsPlainTextSerializer::AppendElementEnd(nsIContent *aElement, +nsPlainTextSerializer::AppendElementEnd(nsIDOMElement *aElement, nsAString& aStr) { NS_ENSURE_ARG(aElement); - mContent = aElement; + mContent = do_QueryInterface(aElement); + if (!mContent) return NS_ERROR_FAILURE; nsresult rv; PRInt32 id = GetIdForContent(mContent); @@ -454,8 +456,8 @@ nsPlainTextSerializer::Flush(nsAString& aStr) } NS_IMETHODIMP -nsPlainTextSerializer::AppendDocumentStart(nsIDocument *aDocument, - nsAString& aStr) +nsPlainTextSerializer::AppendDocumentStart(nsIDOMDocument *aDocument, + nsAString& aStr) { return NS_OK; } diff --git a/content/base/src/nsPlainTextSerializer.h b/content/base/src/nsPlainTextSerializer.h index 0d27d2398e78..42df1a56a2a8 100644 --- a/content/base/src/nsPlainTextSerializer.h +++ b/content/base/src/nsPlainTextSerializer.h @@ -71,27 +71,27 @@ public: const char* aCharSet, PRBool aIsCopying, PRBool aIsWholeDocument); - NS_IMETHOD AppendText(nsIContent* aText, PRInt32 aStartOffset, + NS_IMETHOD AppendText(nsIDOMText* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr); - NS_IMETHOD AppendCDATASection(nsIContent* aCDATASection, + NS_IMETHOD AppendCDATASection(nsIDOMCDATASection* aCDATASection, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr); - NS_IMETHOD AppendProcessingInstruction(nsIContent* aPI, + NS_IMETHOD AppendProcessingInstruction(nsIDOMProcessingInstruction* aPI, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) { return NS_OK; } - NS_IMETHOD AppendComment(nsIContent* aComment, PRInt32 aStartOffset, + NS_IMETHOD AppendComment(nsIDOMComment* aComment, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) { return NS_OK; } - NS_IMETHOD AppendDoctype(nsIContent *aDoctype, + NS_IMETHOD AppendDoctype(nsIDOMDocumentType *aDoctype, nsAString& aStr) { return NS_OK; } - NS_IMETHOD AppendElementStart(nsIContent *aElement, - nsIContent *aOriginalElement, + NS_IMETHOD AppendElementStart(nsIDOMElement *aElement, + nsIDOMElement *aOriginalElement, nsAString& aStr); - NS_IMETHOD AppendElementEnd(nsIContent *aElement, + NS_IMETHOD AppendElementEnd(nsIDOMElement *aElement, nsAString& aStr); NS_IMETHOD Flush(nsAString& aStr); - NS_IMETHOD AppendDocumentStart(nsIDocument *aDocument, + NS_IMETHOD AppendDocumentStart(nsIDOMDocument *aDocument, nsAString& aStr); // nsIContentSink diff --git a/content/base/src/nsXHTMLContentSerializer.cpp b/content/base/src/nsXHTMLContentSerializer.cpp index 21d603fa33de..ac6085baccfe 100644 --- a/content/base/src/nsXHTMLContentSerializer.cpp +++ b/content/base/src/nsXHTMLContentSerializer.cpp @@ -155,7 +155,7 @@ nsXHTMLContentSerializer::HasLongLines(const nsString& text, PRInt32& aLastNewli } NS_IMETHODIMP -nsXHTMLContentSerializer::AppendText(nsIContent* aText, +nsXHTMLContentSerializer::AppendText(nsIDOMText* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) @@ -260,7 +260,7 @@ nsXHTMLContentSerializer::EscapeURI(nsIContent* aContent, const nsAString& aURI, void nsXHTMLContentSerializer::SerializeAttributes(nsIContent* aContent, - nsIContent *aOriginalElement, + nsIDOMElement *aOriginalElement, nsAString& aTagPrefix, const nsAString& aTagNamespaceURI, nsIAtom* aTagName, @@ -306,8 +306,9 @@ nsXHTMLContentSerializer::SerializeAttributes(nsIContent* aContent, else if (aTagName == nsGkAtoms::li) { mIsFirstChildOfOL = IsFirstChildOfOL(aOriginalElement); if (mIsFirstChildOfOL) { + nsCOMPtr element (do_QueryInterface(aContent)); // If OL is parent of this LI, serialize attributes in different manner. - SerializeLIValueAttribute(aContent, aStr); + SerializeLIValueAttribute(element, aStr); } } } @@ -444,7 +445,7 @@ nsXHTMLContentSerializer::SerializeAttributes(nsIContent* aContent, void -nsXHTMLContentSerializer::AppendEndOfElementStart(nsIContent *aOriginalElement, +nsXHTMLContentSerializer::AppendEndOfElementStart(nsIDOMElement *aOriginalElement, nsIAtom * aName, PRInt32 aNamespaceID, nsAString& aStr) @@ -459,7 +460,7 @@ nsXHTMLContentSerializer::AppendEndOfElementStart(nsIContent *aOriginalElement, return; } - nsIContent* content = aOriginalElement; + nsCOMPtr content = do_QueryInterface(aOriginalElement); // for non empty elements, even if they are not a container, we always // serialize their content, because the XHTML element could contain non XHTML @@ -486,7 +487,7 @@ nsXHTMLContentSerializer::AppendEndOfElementStart(nsIContent *aOriginalElement, void nsXHTMLContentSerializer::AfterElementStart(nsIContent * aContent, - nsIContent *aOriginalElement, + nsIDOMElement *aOriginalElement, nsAString& aStr) { nsIAtom *name = aContent->Tag(); @@ -549,7 +550,7 @@ nsXHTMLContentSerializer::AfterElementEnd(nsIContent * aContent, NS_IMETHODIMP -nsXHTMLContentSerializer::AppendDocumentStart(nsIDocument *aDocument, +nsXHTMLContentSerializer::AppendDocumentStart(nsIDOMDocument *aDocument, nsAString& aStr) { if (!mBodyOnly) @@ -978,7 +979,7 @@ nsXHTMLContentSerializer::MaybeLeaveFromPreContent(nsIContent* aNode) } void -nsXHTMLContentSerializer::SerializeLIValueAttribute(nsIContent* aElement, +nsXHTMLContentSerializer::SerializeLIValueAttribute(nsIDOMElement* aElement, nsAString& aStr) { // We are copying and we are at the "first" LI node of OL in selected range. @@ -1049,7 +1050,7 @@ nsXHTMLContentSerializer::SerializeLIValueAttribute(nsIContent* aElement, } PRBool -nsXHTMLContentSerializer::IsFirstChildOfOL(nsIContent* aElement) +nsXHTMLContentSerializer::IsFirstChildOfOL(nsIDOMElement* aElement) { nsCOMPtr node = do_QueryInterface(aElement); nsAutoString parentName; diff --git a/content/base/src/nsXHTMLContentSerializer.h b/content/base/src/nsXHTMLContentSerializer.h index 75af438fc37b..8e745b2e857b 100644 --- a/content/base/src/nsXHTMLContentSerializer.h +++ b/content/base/src/nsXHTMLContentSerializer.h @@ -62,12 +62,12 @@ class nsXHTMLContentSerializer : public nsXMLContentSerializer { const char* aCharSet, PRBool aIsCopying, PRBool aRewriteEncodingDeclaration); - NS_IMETHOD AppendText(nsIContent* aText, + NS_IMETHOD AppendText(nsIDOMText* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr); - NS_IMETHOD AppendDocumentStart(nsIDocument *aDocument, + NS_IMETHOD AppendDocumentStart(nsIDOMDocument *aDocument, nsAString& aStr); protected: @@ -77,13 +77,13 @@ class nsXHTMLContentSerializer : public nsXMLContentSerializer { PRBool & aForceFormat, nsAString& aStr); - virtual void AppendEndOfElementStart(nsIContent *aOriginalElement, + virtual void AppendEndOfElementStart(nsIDOMElement *aOriginalElement, nsIAtom * aName, PRInt32 aNamespaceID, nsAString& aStr); virtual void AfterElementStart(nsIContent * aContent, - nsIContent *aOriginalElement, + nsIDOMElement *aOriginalElement, nsAString& aStr); virtual PRBool CheckElementEnd(nsIContent * aContent, @@ -105,7 +105,7 @@ class nsXHTMLContentSerializer : public nsXMLContentSerializer { virtual void MaybeLeaveFromPreContent(nsIContent* aNode); virtual void SerializeAttributes(nsIContent* aContent, - nsIContent *aOriginalElement, + nsIDOMElement *aOriginalElement, nsAString& aTagPrefix, const nsAString& aTagNamespaceURI, nsIAtom* aTagName, @@ -113,9 +113,9 @@ class nsXHTMLContentSerializer : public nsXMLContentSerializer { PRUint32 aSkipAttr, PRBool aAddNSAttr); - PRBool IsFirstChildOfOL(nsIContent* aElement); + PRBool IsFirstChildOfOL(nsIDOMElement* aElement); - void SerializeLIValueAttribute(nsIContent* aElement, + void SerializeLIValueAttribute(nsIDOMElement* aElement, nsAString& aStr); PRBool IsShorthandAttr(const nsIAtom* aAttrName, const nsIAtom* aElementName); diff --git a/content/base/src/nsXMLContentSerializer.cpp b/content/base/src/nsXMLContentSerializer.cpp index 88a7595fe070..30187b0fe119 100644 --- a/content/base/src/nsXMLContentSerializer.cpp +++ b/content/base/src/nsXMLContentSerializer.cpp @@ -148,13 +148,13 @@ nsXMLContentSerializer::Init(PRUint32 aFlags, PRUint32 aWrapColumn, } nsresult -nsXMLContentSerializer::AppendTextData(nsIContent* aNode, +nsXMLContentSerializer::AppendTextData(nsIDOMNode* aNode, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr, PRBool aTranslateEntities) { - nsIContent* content = aNode; + nsCOMPtr content = do_QueryInterface(aNode); const nsTextFragment* frag; if (!content || !(frag = content->GetText())) { return NS_ERROR_FAILURE; @@ -194,7 +194,7 @@ nsXMLContentSerializer::AppendTextData(nsIContent* aNode, } NS_IMETHODIMP -nsXMLContentSerializer::AppendText(nsIContent* aText, +nsXMLContentSerializer::AppendText(nsIDOMText* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) @@ -225,7 +225,7 @@ nsXMLContentSerializer::AppendText(nsIContent* aText, } NS_IMETHODIMP -nsXMLContentSerializer::AppendCDATASection(nsIContent* aCDATASection, +nsXMLContentSerializer::AppendCDATASection(nsIDOMCDATASection* aCDATASection, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) @@ -260,22 +260,21 @@ nsXMLContentSerializer::AppendCDATASection(nsIContent* aCDATASection, } NS_IMETHODIMP -nsXMLContentSerializer::AppendProcessingInstruction(nsIContent* aPI, +nsXMLContentSerializer::AppendProcessingInstruction(nsIDOMProcessingInstruction* aPI, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) { - nsCOMPtr pi = do_QueryInterface(aPI); - NS_ENSURE_ARG(pi); + NS_ENSURE_ARG(aPI); nsresult rv; nsAutoString target, data, start; MaybeAddNewlineForRootNode(aStr); - rv = pi->GetTarget(target); + rv = aPI->GetTarget(target); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; - rv = pi->GetData(data); + rv = aPI->GetData(data); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; start.AppendLiteral(" comment = do_QueryInterface(aComment); - NS_ENSURE_ARG(comment); + NS_ENSURE_ARG(aComment); nsresult rv; nsAutoString data; - rv = comment->GetData(data); + rv = aComment->GetData(data); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; if (aStartOffset || (aEndOffset != -1)) { @@ -362,21 +360,20 @@ nsXMLContentSerializer::AppendComment(nsIContent* aComment, } NS_IMETHODIMP -nsXMLContentSerializer::AppendDoctype(nsIContent* aDocType, +nsXMLContentSerializer::AppendDoctype(nsIDOMDocumentType *aDoctype, nsAString& aStr) { - nsCOMPtr docType = do_QueryInterface(aDocType); - NS_ENSURE_ARG(docType); + NS_ENSURE_ARG(aDoctype); nsresult rv; nsAutoString name, publicId, systemId, internalSubset; - rv = docType->GetName(name); + rv = aDoctype->GetName(name); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; - rv = docType->GetPublicId(publicId); + rv = aDoctype->GetPublicId(publicId); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; - rv = docType->GetSystemId(systemId); + rv = aDoctype->GetSystemId(systemId); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; - rv = docType->GetInternalSubset(internalSubset); + rv = aDoctype->GetInternalSubset(internalSubset); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; MaybeAddNewlineForRootNode(aStr); @@ -430,7 +427,7 @@ nsXMLContentSerializer::AppendDoctype(nsIContent* aDocType, } AppendToString(kGreaterThan, aStr); - MaybeFlagNewlineForRootNode(aDocType); + MaybeFlagNewlineForRootNode(aDoctype); return NS_OK; } @@ -438,7 +435,7 @@ nsXMLContentSerializer::AppendDoctype(nsIContent* aDocType, nsresult nsXMLContentSerializer::PushNameSpaceDecl(const nsAString& aPrefix, const nsAString& aURI, - nsIContent* aOwner) + nsIDOMElement* aOwner) { NameSpaceDecl* decl = mNameSpaceStack.AppendElement(); if (!decl) return NS_ERROR_OUT_OF_MEMORY; @@ -452,7 +449,7 @@ nsXMLContentSerializer::PushNameSpaceDecl(const nsAString& aPrefix, } void -nsXMLContentSerializer::PopNameSpaceDeclsFor(nsIContent* aOwner) +nsXMLContentSerializer::PopNameSpaceDeclsFor(nsIDOMElement* aOwner) { PRInt32 index, count; @@ -468,7 +465,7 @@ nsXMLContentSerializer::PopNameSpaceDeclsFor(nsIContent* aOwner) PRBool nsXMLContentSerializer::ConfirmPrefix(nsAString& aPrefix, const nsAString& aURI, - nsIContent* aElement, + nsIDOMElement* aElement, PRBool aIsAttribute) { if (aPrefix.EqualsLiteral(kXMLNS)) { @@ -719,7 +716,7 @@ nsXMLContentSerializer::SerializeAttr(const nsAString& aPrefix, PRUint32 nsXMLContentSerializer::ScanNamespaceDeclarations(nsIContent* aContent, - nsIContent *aOriginalElement, + nsIDOMElement *aOriginalElement, const nsAString& aTagNamespaceURI) { PRUint32 index, count; @@ -815,7 +812,7 @@ nsXMLContentSerializer::IsJavaScript(nsIContent * aContent, nsIAtom* aAttrNameAt void nsXMLContentSerializer::SerializeAttributes(nsIContent* aContent, - nsIContent *aOriginalElement, + nsIDOMElement *aOriginalElement, nsAString& aTagPrefix, const nsAString& aTagNamespaceURI, nsIAtom* aTagName, @@ -895,13 +892,14 @@ nsXMLContentSerializer::SerializeAttributes(nsIContent* aContent, } NS_IMETHODIMP -nsXMLContentSerializer::AppendElementStart(nsIContent *aElement, - nsIContent *aOriginalElement, +nsXMLContentSerializer::AppendElementStart(nsIDOMElement *aElement, + nsIDOMElement *aOriginalElement, nsAString& aStr) { NS_ENSURE_ARG(aElement); - nsIContent* content = aElement; + nsCOMPtr content(do_QueryInterface(aElement)); + if (!content) return NS_ERROR_FAILURE; PRBool forceFormat = PR_FALSE; if (!CheckElementStart(content, forceFormat, aStr)) { @@ -909,9 +907,9 @@ nsXMLContentSerializer::AppendElementStart(nsIContent *aElement, } nsAutoString tagPrefix, tagLocalName, tagNamespaceURI; - aElement->NodeInfo()->GetPrefix(tagPrefix); - aElement->NodeInfo()->GetLocalName(tagLocalName); - aElement->NodeInfo()->GetNamespaceURI(tagNamespaceURI); + aElement->GetPrefix(tagPrefix); + aElement->GetLocalName(tagLocalName); + aElement->GetNamespaceURI(tagNamespaceURI); PRUint32 skipAttr = ScanNamespaceDeclarations(content, aOriginalElement, tagNamespaceURI); @@ -981,13 +979,15 @@ nsXMLContentSerializer::AppendElementStart(nsIContent *aElement, } void -nsXMLContentSerializer::AppendEndOfElementStart(nsIContent *aOriginalElement, +nsXMLContentSerializer::AppendEndOfElementStart(nsIDOMElement *aOriginalElement, nsIAtom * aName, PRInt32 aNamespaceID, nsAString& aStr) { // We don't output a separate end tag for empty elements - if (!aOriginalElement->GetChildCount()) { + PRBool hasChildren = PR_FALSE; + if (NS_FAILED(aOriginalElement->HasChildNodes(&hasChildren)) || + !hasChildren) { AppendToString(NS_LITERAL_STRING("/>"), aStr); } else { @@ -996,12 +996,13 @@ nsXMLContentSerializer::AppendEndOfElementStart(nsIContent *aOriginalElement, } NS_IMETHODIMP -nsXMLContentSerializer::AppendElementEnd(nsIContent *aElement, +nsXMLContentSerializer::AppendElementEnd(nsIDOMElement *aElement, nsAString& aStr) { NS_ENSURE_ARG(aElement); - nsIContent* content = aElement; + nsCOMPtr content(do_QueryInterface(aElement)); + if (!content) return NS_ERROR_FAILURE; PRBool forceFormat = PR_FALSE, outputElementEnd; outputElementEnd = CheckElementEnd(content, forceFormat, aStr); @@ -1020,9 +1021,9 @@ nsXMLContentSerializer::AppendElementEnd(nsIContent *aElement, nsAutoString tagPrefix, tagLocalName, tagNamespaceURI; - aElement->NodeInfo()->GetPrefix(tagPrefix); - aElement->NodeInfo()->GetLocalName(tagLocalName); - aElement->NodeInfo()->GetNamespaceURI(tagNamespaceURI); + aElement->GetPrefix(tagPrefix); + aElement->GetLocalName(tagLocalName); + aElement->GetNamespaceURI(tagNamespaceURI); #ifdef DEBUG PRBool debugNeedToPushNamespace = @@ -1076,13 +1077,18 @@ nsXMLContentSerializer::AppendElementEnd(nsIContent *aElement, } NS_IMETHODIMP -nsXMLContentSerializer::AppendDocumentStart(nsIDocument *aDocument, +nsXMLContentSerializer::AppendDocumentStart(nsIDOMDocument *aDocument, nsAString& aStr) { NS_ENSURE_ARG_POINTER(aDocument); + nsCOMPtr doc(do_QueryInterface(aDocument)); + if (!doc) { + return NS_OK; + } + nsAutoString version, encoding, standalone; - aDocument->GetXMLDeclaration(version, encoding, standalone); + doc->GetXMLDeclaration(version, encoding, standalone); if (version.IsEmpty()) return NS_OK; // A declaration must have version, or there is no decl @@ -1128,10 +1134,17 @@ nsXMLContentSerializer::CheckElementEnd(nsIContent * aContent, nsAString& aStr) { // We don't output a separate end tag for empty element + nsCOMPtr node(do_QueryInterface(aContent)); + PRBool hasChildren; aForceFormat = PR_FALSE; - return aContent->GetChildCount() > 0; + + if (NS_SUCCEEDED(node->HasChildNodes(&hasChildren)) && !hasChildren) { + return PR_FALSE; + } + return PR_TRUE; } + void nsXMLContentSerializer::AppendToString(const PRUnichar* aStr, PRInt32 aLength, @@ -1232,11 +1245,14 @@ nsXMLContentSerializer::MaybeAddNewlineForRootNode(nsAString& aStr) } void -nsXMLContentSerializer::MaybeFlagNewlineForRootNode(nsINode* aNode) +nsXMLContentSerializer::MaybeFlagNewlineForRootNode(nsIDOMNode* aNode) { - nsINode* parent = aNode->GetNodeParent(); + nsCOMPtr parent; + aNode->GetParentNode(getter_AddRefs(parent)); if (parent) { - mAddNewlineForRootNode = aNode->IsNodeOfType(nsINode::eDOCUMENT); + PRUint16 type; + parent->GetNodeType(&type); + mAddNewlineForRootNode = type == nsIDOMNode::DOCUMENT_NODE; } } diff --git a/content/base/src/nsXMLContentSerializer.h b/content/base/src/nsXMLContentSerializer.h index 0abf2d10abff..d9f5d01e401e 100644 --- a/content/base/src/nsXMLContentSerializer.h +++ b/content/base/src/nsXMLContentSerializer.h @@ -70,34 +70,34 @@ class nsXMLContentSerializer : public nsIContentSerializer { const char* aCharSet, PRBool aIsCopying, PRBool aRewriteEncodingDeclaration); - NS_IMETHOD AppendText(nsIContent* aText, PRInt32 aStartOffset, + NS_IMETHOD AppendText(nsIDOMText* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr); - NS_IMETHOD AppendCDATASection(nsIContent* aCDATASection, + NS_IMETHOD AppendCDATASection(nsIDOMCDATASection* aCDATASection, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr); - NS_IMETHOD AppendProcessingInstruction(nsIContent* aPI, + NS_IMETHOD AppendProcessingInstruction(nsIDOMProcessingInstruction* aPI, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr); - NS_IMETHOD AppendComment(nsIContent* aComment, PRInt32 aStartOffset, + NS_IMETHOD AppendComment(nsIDOMComment* aComment, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr); - NS_IMETHOD AppendDoctype(nsIContent *aDoctype, + NS_IMETHOD AppendDoctype(nsIDOMDocumentType *aDoctype, nsAString& aStr); - NS_IMETHOD AppendElementStart(nsIContent *aElement, - nsIContent *aOriginalElement, + NS_IMETHOD AppendElementStart(nsIDOMElement *aElement, + nsIDOMElement *aOriginalElement, nsAString& aStr); - NS_IMETHOD AppendElementEnd(nsIContent *aElement, + NS_IMETHOD AppendElementEnd(nsIDOMElement *aElement, nsAString& aStr); NS_IMETHOD Flush(nsAString& aStr) { return NS_OK; } - NS_IMETHOD AppendDocumentStart(nsIDocument *aDocument, + NS_IMETHOD AppendDocumentStart(nsIDOMDocument *aDocument, nsAString& aStr); protected: @@ -185,7 +185,7 @@ class nsXMLContentSerializer : public nsIContentSerializer { * retrieve the text content of the node and append it to the given string * It doesn't increment the column position */ - nsresult AppendTextData(nsIContent* aNode, + nsresult AppendTextData(nsIDOMNode* aNode, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr, @@ -193,8 +193,8 @@ class nsXMLContentSerializer : public nsIContentSerializer { virtual nsresult PushNameSpaceDecl(const nsAString& aPrefix, const nsAString& aURI, - nsIContent* aOwner); - void PopNameSpaceDeclsFor(nsIContent* aOwner); + nsIDOMElement* aOwner); + void PopNameSpaceDeclsFor(nsIDOMElement* aOwner); /** * The problem that ConfirmPrefix fixes is that anyone can insert nodes @@ -216,7 +216,7 @@ class nsXMLContentSerializer : public nsIContentSerializer { */ PRBool ConfirmPrefix(nsAString& aPrefix, const nsAString& aURI, - nsIContent* aElement, + nsIDOMElement* aElement, PRBool aIsAttribute); /** * GenerateNewPrefix generates a new prefix and writes it to aPrefix @@ -224,11 +224,11 @@ class nsXMLContentSerializer : public nsIContentSerializer { void GenerateNewPrefix(nsAString& aPrefix); PRUint32 ScanNamespaceDeclarations(nsIContent* aContent, - nsIContent *aOriginalElement, + nsIDOMElement *aOriginalElement, const nsAString& aTagNamespaceURI); virtual void SerializeAttributes(nsIContent* aContent, - nsIContent *aOriginalElement, + nsIDOMElement *aOriginalElement, nsAString& aTagPrefix, const nsAString& aTagNamespaceURI, nsIAtom* aTagName, @@ -263,7 +263,7 @@ class nsXMLContentSerializer : public nsIContentSerializer { * this method is responsible to finish the start tag, * in particulary to append the "greater than" sign */ - virtual void AppendEndOfElementStart(nsIContent *aOriginalElement, + virtual void AppendEndOfElementStart(nsIDOMElement *aOriginalElement, nsIAtom * aName, PRInt32 aNamespaceID, nsAString& aStr); @@ -274,7 +274,7 @@ class nsXMLContentSerializer : public nsIContentSerializer { * (called at the end of AppendElementStart) */ virtual void AfterElementStart(nsIContent * aContent, - nsIContent *aOriginalElement, + nsIDOMElement *aOriginalElement, nsAString& aStr) { }; /** @@ -328,7 +328,7 @@ class nsXMLContentSerializer : public nsIContentSerializer { // Functions to check for newlines that needs to be added between nodes in // the root of a document. See mAddNewlineForRootNode void MaybeAddNewlineForRootNode(nsAString& aStr); - void MaybeFlagNewlineForRootNode(nsINode* aNode); + void MaybeFlagNewlineForRootNode(nsIDOMNode* aNode); // Functions to check if we enter in or leave from a preformated content virtual void MaybeEnterInPreContent(nsIContent* aNode); @@ -339,7 +339,7 @@ class nsXMLContentSerializer : public nsIContentSerializer { struct NameSpaceDecl { nsString mPrefix; nsString mURI; - nsIContent* mOwner; + nsIDOMElement* mOwner; }; nsTArray mNameSpaceStack;