Bug 1358979 - nsPlainTextSerializer should be cycle collection. r?smaug
nsPlainTextSerializer holds Element, so it should use cycle collection class.
MozReview-Commit-ID: ELykrDQaCei
--- a/dom/base/nsDocumentEncoder.cpp
+++ b/dom/base/nsDocumentEncoder.cpp
@@ -199,17 +199,18 @@ NS_IMPL_CYCLE_COLLECTING_ADDREF(nsDocume
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDocumentEncoder)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDocumentEncoder)
NS_INTERFACE_MAP_ENTRY(nsIDocumentEncoder)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_END
NS_IMPL_CYCLE_COLLECTION(nsDocumentEncoder,
- mDocument, mSelection, mRange, mNode, mCommonParent)
+ mDocument, mSelection, mRange, mNode, mSerializer,
+ mCommonParent)
nsDocumentEncoder::nsDocumentEncoder() : mCachedBuffer(nullptr)
{
Initialize();
mMimeType.AssignLiteral("text/plain");
}
void nsDocumentEncoder::Initialize(bool aClearCachedSerializer)
--- a/dom/base/nsPlainTextSerializer.cpp
+++ b/dom/base/nsPlainTextSerializer.cpp
@@ -50,16 +50,27 @@ static const char16_t kSPACE = ' ';
static int32_t HeaderLevel(nsIAtom* aTag);
static int32_t GetUnicharWidth(char16_t ucs);
static int32_t GetUnicharStringWidth(const char16_t* pwcs, int32_t n);
// Someday may want to make this non-const:
static const uint32_t TagStackSize = 500;
static const uint32_t OLStackSize = 100;
+NS_IMPL_CYCLE_COLLECTING_ADDREF(nsPlainTextSerializer)
+NS_IMPL_CYCLE_COLLECTING_RELEASE(nsPlainTextSerializer)
+
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsPlainTextSerializer)
+ NS_INTERFACE_MAP_ENTRY(nsIContentSerializer)
+ NS_INTERFACE_MAP_ENTRY(nsISupports)
+NS_INTERFACE_MAP_END
+
+NS_IMPL_CYCLE_COLLECTION(nsPlainTextSerializer,
+ mElement)
+
nsresult
NS_NewPlainTextSerializer(nsIContentSerializer** aSerializer)
{
RefPtr<nsPlainTextSerializer> it = new nsPlainTextSerializer();
it.forget(aSerializer);
return NS_OK;
}
@@ -111,20 +122,16 @@ nsPlainTextSerializer::nsPlainTextSerial
nsPlainTextSerializer::~nsPlainTextSerializer()
{
delete[] mTagStack;
delete[] mOLStack;
NS_WARNING_ASSERTION(mHeadLevel == 0, "Wrong head level!");
}
-NS_IMPL_ISUPPORTS(nsPlainTextSerializer,
- nsIContentSerializer)
-
-
NS_IMETHODIMP
nsPlainTextSerializer::Init(uint32_t aFlags, uint32_t aWrapColumn,
const char* aCharSet, bool aIsCopying,
bool aIsWholeDocument)
{
#ifdef DEBUG
// Check if the major control flags are set correctly.
if (aFlags & nsIDocumentEncoder::OutputFormatFlowed) {
--- a/dom/base/nsPlainTextSerializer.h
+++ b/dom/base/nsPlainTextSerializer.h
@@ -32,17 +32,18 @@ class Element;
} // namespace dom
} // namespace mozilla
class nsPlainTextSerializer final : public nsIContentSerializer
{
public:
nsPlainTextSerializer();
- NS_DECL_ISUPPORTS
+ NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+ NS_DECL_CYCLE_COLLECTION_CLASS(nsPlainTextSerializer)
// nsIContentSerializer
NS_IMETHOD Init(uint32_t flags, uint32_t aWrapColumn,
const char* aCharSet, bool aIsCopying,
bool aIsWholeDocument) override;
NS_IMETHOD AppendText(nsIContent* aText, int32_t aStartOffset,
int32_t aEndOffset, nsAString& aStr) override;