зеркало из https://github.com/mozilla/pjs.git
Bug 608687, clear mRoot after uninitializing so that template generated content gets removed, r=smaug,a=blocking
This commit is contained in:
Родитель
5c806b6f28
Коммит
d0537b3cfc
|
@ -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>
|
Загрузка…
Ссылка в новой задаче