From 921be72a77fb924f9d5ec0e640ebe0b3de15a9da Mon Sep 17 00:00:00 2001 From: Neil Deakin Date: Tue, 7 Dec 2010 14:02:03 -0500 Subject: [PATCH] Bug 608687, clear mRoot after uninitializing so that template generated content gets removed, r=smaug,a=blocking --- .../templates/src/nsXULTemplateBuilder.cpp | 2 - .../xul/templates/src/nsXULTemplateBuilder.h | 7 ++- .../xul/templates/tests/chrome/Makefile.in | 1 + .../tests/chrome/test_tmpl_regenerate.xul | 51 +++++++++++++++++++ 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 content/xul/templates/tests/chrome/test_tmpl_regenerate.xul diff --git a/content/xul/templates/src/nsXULTemplateBuilder.cpp b/content/xul/templates/src/nsXULTemplateBuilder.cpp index 2a350c97397b..60a411c19a26 100644 --- a/content/xul/templates/src/nsXULTemplateBuilder.cpp +++ b/content/xul/templates/src/nsXULTemplateBuilder.cpp @@ -1176,7 +1176,6 @@ nsXULTemplateBuilder::ContentRemoved(nsIDocument* aDocument, mDB = nsnull; mCompDB = nsnull; - mRoot = nsnull; mDataSource = nsnull; } } @@ -1195,7 +1194,6 @@ nsXULTemplateBuilder::NodeWillBeDestroyed(const nsINode* aNode) mDataSource = nsnull; mDB = nsnull; mCompDB = nsnull; - mRoot = nsnull; nsContentUtils::AddScriptRunner( NS_NewRunnableMethod(this, &nsXULTemplateBuilder::UninitTrue)); diff --git a/content/xul/templates/src/nsXULTemplateBuilder.h b/content/xul/templates/src/nsXULTemplateBuilder.h index 4eeca9204292..e3e6646f6fe4 100644 --- a/content/xul/templates/src/nsXULTemplateBuilder.h +++ b/content/xul/templates/src/nsXULTemplateBuilder.h @@ -164,8 +164,11 @@ public: } } } - void UninitFalse() { Uninit(PR_FALSE); } - void UninitTrue() { Uninit(PR_TRUE); } + + // mRoot should not be cleared until after Uninit is finished so that + // generated content can be removed during uninitialization. + void UninitFalse() { Uninit(PR_FALSE); mRoot = nsnull; } + void UninitTrue() { Uninit(PR_TRUE); mRoot = nsnull; } /** * Find the