Bug 608687, clear mRoot after uninitializing so that template generated content gets removed, r=smaug,a=blocking

This commit is contained in:
Neil Deakin 2010-12-07 14:02:03 -05:00
Родитель a4d3a6ab12
Коммит 921be72a77
4 изменённых файлов: 57 добавлений и 4 удалений

Просмотреть файл

@ -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));

Просмотреть файл

@ -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 <template> tag that applies for this builder

Просмотреть файл

@ -258,6 +258,7 @@ _TEST_FILES = \
test_tmpl_xmlquerywithinlinedatawithmultiplequeries.xul \
test_tmpl_invalidqp.xul \
test_tmpl_errors.xul \
test_tmpl_regenerate.xul \
$(NULL)
libs:: $(_TEST_FILES)

Просмотреть файл

@ -0,0 +1,51 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
<!--
Regenerate template by removing and appending elements
-->
<window title="XUL Template Tests" width="500" height="600"
onload="test_regenerate()"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/javascript"
src="chrome://mochikit/content/MochiKit/packed.js"></script>
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<body xmlns="http://www.w3.org/1999/xhtml" style="height: 300px; overflow: auto;"/>
<script>
<![CDATA[
SimpleTest.waitForExplicitFinish();
function test_regenerate()
{
var container = document.getElementById("container");
var node = container.firstChild;
if (node.childNodes.length != 2) {
setTimeout(test_regenerate, 50);
return;
}
container.removeChild(node);
is(node.childNodes.length, 1, "childNodes after removeChild");
container.appendChild(node);
is(node.childNodes.length, 2, "childNodes after appendChild");
SimpleTest.finish();
}
]]>
</script>
<vbox id="container">
<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="animals.rdf" ref="http://www.some-fictitious-zoo.com/birds">
<template zoo:name="Barn Owl" xmlns:zoo="http://www.some-fictitious-zoo.com/rdf#">
<label uri="rdf:*" value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
</template>
</vbox>
</vbox>
</window>