Bug 650784 part 2 - Make nsPlainTextSerializer not be a content sink. r=smaug.

This commit is contained in:
Henri Sivonen 2012-03-08 16:42:16 +02:00
Родитель f0516a6bba
Коммит 36e9d25a16
5 изменённых файлов: 3 добавлений и 180 удалений

Просмотреть файл

@ -65,7 +65,6 @@ nsINodeList.h \
nsIScriptElement.h \
nsIStyleSheetLinkingElement.h \
nsIContentSerializer.h \
nsIHTMLToTextSink.h \
nsIXPathEvaluatorInternal.h \
mozISanitizingSerializer.h \
nsCaseTreatment.h \

Просмотреть файл

@ -1,66 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef _nsIPlainTextSink_h__
#define _nsIPlainTextSink_h__
#include "nsISupports.h"
#include "nsStringGlue.h"
#define NS_PLAINTEXTSINK_CONTRACTID "@mozilla.org/layout/plaintextsink;1"
/* starting interface: nsIContentSerializer */
#define NS_IHTMLTOTEXTSINK_IID_STR "b12b5643-07cb-401e-aabb-64b2dcd2717f"
#define NS_IHTMLTOTEXTSINK_IID \
{0xb12b5643, 0x07cb, 0x401e, \
{ 0xaa, 0xbb, 0x64, 0xb2, 0xdc, 0xd2, 0x71, 0x7f }}
class nsIHTMLToTextSink : public nsISupports {
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_IHTMLTOTEXTSINK_IID)
NS_IMETHOD Initialize(nsAString* aOutString,
PRUint32 aFlags, PRUint32 aWrapCol) = 0;
// This function violates string ownership rules, see impl.
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsIHTMLToTextSink, NS_IHTMLTOTEXTSINK_IID)
#endif

Просмотреть файл

@ -144,11 +144,8 @@ nsPlainTextSerializer::~nsPlainTextSerializer()
NS_WARN_IF_FALSE(mHeadLevel == 0, "Wrong head level!");
}
NS_IMPL_ISUPPORTS4(nsPlainTextSerializer,
nsIContentSerializer,
nsIContentSink,
nsIHTMLContentSink,
nsIHTMLToTextSink)
NS_IMPL_ISUPPORTS1(nsPlainTextSerializer,
nsIContentSerializer)
NS_IMETHODIMP
@ -170,8 +167,6 @@ nsPlainTextSerializer::Init(PRUint32 aFlags, PRUint32 aWrapColumn,
}
#endif
NS_ENSURE_TRUE(nsContentUtils::GetParserService(), NS_ERROR_UNEXPECTED);
mFlags = aFlags;
mWrapColumn = aWrapColumn;
@ -457,83 +452,6 @@ nsPlainTextSerializer::AppendDocumentStart(nsIDocument *aDocument,
return NS_OK;
}
NS_IMETHODIMP
nsPlainTextSerializer::OpenContainer(const nsIParserNode& aNode)
{
PRInt32 type = aNode.GetNodeType();
if (type == eHTMLTag_head) {
++mHeadLevel;
return NS_OK;
}
return DoOpenContainer(&aNode, type);
}
NS_IMETHODIMP
nsPlainTextSerializer::CloseContainer(const nsHTMLTag aTag)
{
if (aTag == eHTMLTag_head) {
--mHeadLevel;
NS_ASSERTION(mHeadLevel >= 0, "mHeadLevel < 0");
return NS_OK;
}
return DoCloseContainer(aTag);
}
NS_IMETHODIMP
nsPlainTextSerializer::AddLeaf(const nsIParserNode& aNode)
{
if (mIgnoreAboveIndex != (PRUint32)kNotFound) {
return NS_OK;
}
eHTMLTags type = (eHTMLTags)aNode.GetNodeType();
const nsAString& text = aNode.GetText();
if ((type == eHTMLTag_text) ||
(type == eHTMLTag_whitespace) ||
(type == eHTMLTag_newline)) {
// Copy the text out, stripping out CRs
nsAutoString str;
PRUint32 length;
str.SetCapacity(text.Length());
nsReadingIterator<PRUnichar> srcStart, srcEnd;
length = nsContentUtils::CopyNewlineNormalizedUnicodeTo(text.BeginReading(srcStart), text.EndReading(srcEnd), str);
str.SetLength(length);
return DoAddLeaf(&aNode, type, str);
}
else {
return DoAddLeaf(&aNode, type, text);
}
}
NS_IMETHODIMP
nsPlainTextSerializer::OpenHead()
{
++mHeadLevel;
return NS_OK;
}
NS_IMETHODIMP
nsPlainTextSerializer::IsEnabled(PRInt32 aTag, bool* aReturn)
{
nsHTMLTag theHTMLTag = nsHTMLTag(aTag);
if (theHTMLTag == eHTMLTag_script) {
*aReturn = !(mFlags & nsIDocumentEncoder::OutputNoScriptContent);
}
else if (theHTMLTag == eHTMLTag_frameset) {
*aReturn = !(mFlags & nsIDocumentEncoder::OutputNoFramesContent);
}
else {
*aReturn = false;
}
return NS_OK;
}
/**
* aNode may be null when we're working with the DOM, but then mElement is
* useable instead.

Просмотреть файл

@ -52,7 +52,6 @@
#include "nsILineBreaker.h"
#include "nsIContent.h"
#include "nsIAtom.h"
#include "nsIHTMLToTextSink.h"
#include "nsIDocumentEncoder.h"
#include "nsTArray.h"
@ -62,9 +61,7 @@ class Element;
} // namespace dom
} // namespace mozilla
class nsPlainTextSerializer : public nsIContentSerializer,
public nsIHTMLContentSink,
public nsIHTMLToTextSink
class nsPlainTextSerializer : public nsIContentSerializer
{
public:
nsPlainTextSerializer();
@ -100,29 +97,6 @@ public:
NS_IMETHOD AppendDocumentStart(nsIDocument *aDocument,
nsAString& aStr);
// nsIContentSink
NS_IMETHOD WillParse(void) { return NS_OK; }
NS_IMETHOD WillInterrupt(void) { return NS_OK; }
NS_IMETHOD WillResume(void) { return NS_OK; }
NS_IMETHOD SetParser(nsParserBase* aParser) { return NS_OK; }
NS_IMETHOD OpenContainer(const nsIParserNode& aNode);
NS_IMETHOD CloseContainer(const nsHTMLTag aTag);
NS_IMETHOD AddLeaf(const nsIParserNode& aNode);
virtual void FlushPendingNotifications(mozFlushType aType) { }
NS_IMETHOD SetDocumentCharset(nsACString& aCharset) { return NS_OK; }
virtual nsISupports *GetTarget() { return nsnull; }
// nsIHTMLContentSink
NS_IMETHOD OpenHead();
NS_IMETHOD IsEnabled(PRInt32 aTag, bool* aReturn);
NS_IMETHOD NotifyTagObservers(nsIParserNode* aNode) { return NS_OK; }
NS_IMETHOD BeginContext(PRInt32 aPosition) { return NS_OK; }
NS_IMETHOD EndContext(PRInt32 aPosition) { return NS_OK; }
NS_IMETHOD DidProcessTokens(void) { return NS_OK; }
NS_IMETHOD WillProcessAToken(void) { return NS_OK; }
NS_IMETHOD DidProcessAToken(void) { return NS_OK; }
// nsIHTMLToTextSink
NS_IMETHOD Initialize(nsAString* aOutString,
PRUint32 aFlags, PRUint32 aWrapCol);

Просмотреть файл

@ -62,7 +62,6 @@
#include "nsIFactory.h"
#include "nsIFrameUtil.h"
#include "nsHTMLStyleSheet.h"
#include "nsIHTMLToTextSink.h"
#include "nsILayoutDebugger.h"
#include "nsINameSpaceManager.h"
#include "nsINodeInfo.h"
@ -1136,7 +1135,6 @@ static const mozilla::Module::ContractIDEntry kLayoutContracts[] = {
{ NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "text/html", &kNS_HTMLCONTENTSERIALIZER_CID },
{ NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "application/vnd.mozilla.xul+xml", &kNS_XMLCONTENTSERIALIZER_CID },
{ NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "text/plain", &kNS_PLAINTEXTSERIALIZER_CID },
{ NS_PLAINTEXTSINK_CONTRACTID, &kNS_PLAINTEXTSERIALIZER_CID },
{ MOZ_SANITIZINGHTMLSERIALIZER_CONTRACTID, &kMOZ_SANITIZINGHTMLSERIALIZER_CID },
{ NS_PARSERUTILS_CONTRACTID, &kNS_PARSERUTILS_CID },
{ NS_SCRIPTABLEUNESCAPEHTML_CONTRACTID, &kNS_SCRIPTABLEUNESCAPEHTML_CID },