diff --git a/mozilla/content/base/src/nsContentSink.cpp b/mozilla/content/base/src/nsContentSink.cpp index 9a89625abf8..1f29329528d 100644 --- a/mozilla/content/base/src/nsContentSink.cpp +++ b/mozilla/content/base/src/nsContentSink.cpp @@ -154,10 +154,25 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsContentSink) NS_INTERFACE_MAP_ENTRY(nsICSSLoaderObserver) NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) NS_INTERFACE_MAP_ENTRY(nsIScriptLoaderObserver) + NS_INTERFACE_MAP_ENTRY(nsIDocumentObserver) + NS_INTERFACE_MAP_ENTRY(nsIMutationObserver) + NS_INTERFACE_MAP_ENTRY(nsITimerCallback) NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIScriptLoaderObserver) NS_INTERFACE_MAP_END -NS_IMPL_CYCLE_COLLECTION_2(nsContentSink, mDocument, mParser) +NS_IMPL_CYCLE_COLLECTION_CLASS(nsContentSink) +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsContentSink) + if (tmp->mDocument) { + tmp->mDocument->RemoveObserver(tmp); + } +NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mDocument) +NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mParser) +NS_IMPL_CYCLE_COLLECTION_UNLINK_END +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsContentSink) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mDocument) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mParser) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END + nsContentSink::nsContentSink() { @@ -181,6 +196,11 @@ nsContentSink::nsContentSink() nsContentSink::~nsContentSink() { + if (mDocument) { + // Remove ourselves just to be safe, though we really should have + // been removed in DidBuildModel if everything worked right. + mDocument->RemoveObserver(this); + } } nsresult diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp index 326dc861c6b..686c2efe9d3 100644 --- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp +++ b/mozilla/content/html/document/src/nsHTMLContentSink.cpp @@ -1570,11 +1570,6 @@ HTMLContentSink::~HTMLContentSink() NS_IF_RELEASE(mBody); NS_IF_RELEASE(mRoot); - if (mDocument) { - // Remove ourselves just to be safe, though we really should have - // been removed in DidBuildModel if everything worked right. - mDocument->RemoveObserver(this); - } NS_IF_RELEASE(mHTMLDocument); if (mNotificationTimer) { @@ -1615,22 +1610,16 @@ HTMLContentSink::~HTMLContentSink() } #if DEBUG -NS_IMPL_ISUPPORTS_INHERITED6(HTMLContentSink, +NS_IMPL_ISUPPORTS_INHERITED3(HTMLContentSink, nsContentSink, nsIContentSink, nsIHTMLContentSink, - nsITimerCallback, - nsIDocumentObserver, - nsIMutationObserver, nsIDebugDumpContent) #else -NS_IMPL_ISUPPORTS_INHERITED5(HTMLContentSink, +NS_IMPL_ISUPPORTS_INHERITED2(HTMLContentSink, nsContentSink, nsIContentSink, - nsIHTMLContentSink, - nsITimerCallback, - nsIDocumentObserver, - nsIMutationObserver) + nsIHTMLContentSink) #endif static PRBool diff --git a/mozilla/content/xml/document/src/nsXMLContentSink.cpp b/mozilla/content/xml/document/src/nsXMLContentSink.cpp index dd058b52e8b..b86f3aedc4b 100644 --- a/mozilla/content/xml/document/src/nsXMLContentSink.cpp +++ b/mozilla/content/xml/document/src/nsXMLContentSink.cpp @@ -145,12 +145,6 @@ nsXMLContentSink::nsXMLContentSink() nsXMLContentSink::~nsXMLContentSink() { - if (mDocument) { - // Remove ourselves just to be safe, though we really should have - // been removed in DidBuildModel if everything worked right. - mDocument->RemoveObserver(this); - } - NS_IF_RELEASE(mDocElement); if (mText) { PR_Free(mText); // Doesn't null out, unlike PR_FREEIF @@ -189,9 +183,6 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsXMLContentSink) NS_INTERFACE_MAP_ENTRY(nsIContentSink) NS_INTERFACE_MAP_ENTRY(nsIXMLContentSink) NS_INTERFACE_MAP_ENTRY(nsIExpatSink) - NS_INTERFACE_MAP_ENTRY(nsITimerCallback) - NS_INTERFACE_MAP_ENTRY(nsIDocumentObserver) - NS_INTERFACE_MAP_ENTRY(nsIMutationObserver) NS_INTERFACE_MAP_ENTRY(nsITransformObserver) NS_INTERFACE_MAP_END_INHERITING(nsContentSink)