Bug 686342 - Uninitialize the XUL template builder when XPCOM is being destroyed; r=bzbarsky

This commit is contained in:
Ehsan Akhgari 2011-09-13 12:49:59 -04:00
parent 97e0f80e7f
commit c28978e1f3

View File

@ -224,6 +224,7 @@ nsXULTemplateBuilder::Uninit(PRBool aIsFinal)
{
if (mObservedDocument && aIsFinal) {
gObserverService->RemoveObserver(this, DOM_WINDOW_DESTROYED_TOPIC);
gObserverService->RemoveObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID);
mObservedDocument->RemoveObserver(this);
mObservedDocument = nsnull;
}
@ -465,6 +466,8 @@ nsXULTemplateBuilder::Init(nsIContent* aElement)
doc->AddObserver(this);
mObservedDocument = doc;
gObserverService->AddObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID,
PR_FALSE);
gObserverService->AddObserver(this, DOM_WINDOW_DESTROYED_TOPIC,
PR_FALSE);
}
@ -1117,6 +1120,8 @@ nsXULTemplateBuilder::Observe(nsISupports* aSubject,
if (doc && doc == mObservedDocument)
NodeWillBeDestroyed(doc);
}
} else if (!strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID)) {
UninitTrue();
}
return NS_OK;
}