Bug 489008. Destroy anonymous content off a script-runner. r=bzbarsky

This commit is contained in:
Robert O'Callahan 2009-05-18 10:08:08 +12:00
parent 97c6b9c07b
commit 14fd51447e

View File

@ -3878,13 +3878,31 @@ nsContentUtils::IsInSameAnonymousTree(nsINode* aNode,
} }
class AnonymousContentDestroyer : public nsRunnable {
public:
AnonymousContentDestroyer(nsCOMPtr<nsIContent>* aContent) {
mContent.swap(*aContent);
mParent = mContent->GetParent();
mDoc = mContent->GetOwnerDoc();
}
NS_IMETHOD Run() {
mContent->UnbindFromTree();
return NS_OK;
}
private:
nsCOMPtr<nsIContent> mContent;
// Hold strong refs to the parent content and document so that they
// don't die unexpectedly
nsCOMPtr<nsIDocument> mDoc;
nsCOMPtr<nsIContent> mParent;
};
/* static */ /* static */
void void
nsContentUtils::DestroyAnonymousContent(nsCOMPtr<nsIContent>* aContent) nsContentUtils::DestroyAnonymousContent(nsCOMPtr<nsIContent>* aContent)
{ {
if (*aContent) { if (*aContent) {
(*aContent)->UnbindFromTree(); AddScriptRunner(new AnonymousContentDestroyer(aContent));
*aContent = nsnull;
} }
} }