Bug 1425356 - remove XUL template support, r?bz draft
authorGijs Kruitbosch <gijskruitbosch@gmail.com>
Tue, 19 Dec 2017 14:11:06 +0000
changeset 715365 43154ae3bfb3c6c50a9e914d0aa19e2f61472f57
parent 715364 11d3f2382c715ab5aab1b82d5e9a91d7a7ce97d5
child 715366 66e52eb18406fef8258297e2203db23db8643d30
push id94155
push usergijskruitbosch@gmail.com
push dateWed, 03 Jan 2018 20:55:16 +0000
reviewersbz
bugs1425356
milestone59.0a1
Bug 1425356 - remove XUL template support, r?bz MozReview-Commit-ID: HdBoQ15DFOu
browser/installer/package-manifest.in
dom/tests/mochitest/general/test_interfaces.js
dom/webidl/LegacyQueryInterface.webidl
dom/webidl/XULElement.webidl
dom/webidl/XULTemplateBuilder.webidl
dom/webidl/moz.build
dom/xul/XULDocument.cpp
dom/xul/XULDocument.h
dom/xul/moz.build
dom/xul/nsIXULDocument.h
dom/xul/nsIXULSortService.idl
dom/xul/nsXULContentUtils.cpp
dom/xul/nsXULContentUtils.h
dom/xul/nsXULElement.cpp
dom/xul/nsXULElement.h
dom/xul/nsXULSortService.cpp
dom/xul/nsXULSortService.h
dom/xul/templates/crashtests/257752-1-recursion.rdf
dom/xul/templates/crashtests/257752-1-recursion.xul
dom/xul/templates/crashtests/329884-1.xul
dom/xul/templates/crashtests/330012-1.rdf
dom/xul/templates/crashtests/330012-1.xul
dom/xul/templates/crashtests/404346-1.xul
dom/xul/templates/crashtests/415019-1.xul
dom/xul/templates/crashtests/417840-1.xul
dom/xul/templates/crashtests/424418-1.xul
dom/xul/templates/crashtests/crashtests.list
dom/xul/templates/moz.build
dom/xul/templates/nsContentSupportMap.cpp
dom/xul/templates/nsContentSupportMap.h
dom/xul/templates/nsContentTestNode.cpp
dom/xul/templates/nsContentTestNode.h
dom/xul/templates/nsIXULBuilderListener.idl
dom/xul/templates/nsIXULSortService.idl
dom/xul/templates/nsIXULTemplateBuilder.idl
dom/xul/templates/nsIXULTemplateQueryProcessor.idl
dom/xul/templates/nsIXULTemplateResult.idl
dom/xul/templates/nsIXULTemplateRuleFilter.idl
dom/xul/templates/nsInstantiationNode.cpp
dom/xul/templates/nsInstantiationNode.h
dom/xul/templates/nsRDFBinding.cpp
dom/xul/templates/nsRDFBinding.h
dom/xul/templates/nsRDFConInstanceTestNode.cpp
dom/xul/templates/nsRDFConInstanceTestNode.h
dom/xul/templates/nsRDFConMemberTestNode.cpp
dom/xul/templates/nsRDFConMemberTestNode.h
dom/xul/templates/nsRDFPropertyTestNode.cpp
dom/xul/templates/nsRDFPropertyTestNode.h
dom/xul/templates/nsRDFQuery.cpp
dom/xul/templates/nsRDFQuery.h
dom/xul/templates/nsRDFTestNode.h
dom/xul/templates/nsResourceSet.cpp
dom/xul/templates/nsResourceSet.h
dom/xul/templates/nsRuleNetwork.cpp
dom/xul/templates/nsRuleNetwork.h
dom/xul/templates/nsTemplateMap.h
dom/xul/templates/nsTemplateMatch.cpp
dom/xul/templates/nsTemplateMatch.h
dom/xul/templates/nsTemplateRule.cpp
dom/xul/templates/nsTemplateRule.h
dom/xul/templates/nsTreeRows.cpp
dom/xul/templates/nsTreeRows.h
dom/xul/templates/nsXMLBinding.cpp
dom/xul/templates/nsXMLBinding.h
dom/xul/templates/nsXULContentBuilder.cpp
dom/xul/templates/nsXULContentUtils.cpp
dom/xul/templates/nsXULContentUtils.h
dom/xul/templates/nsXULResourceList.h
dom/xul/templates/nsXULSortService.cpp
dom/xul/templates/nsXULSortService.h
dom/xul/templates/nsXULTemplateBuilder.cpp
dom/xul/templates/nsXULTemplateBuilder.h
dom/xul/templates/nsXULTemplateQueryProcessorRDF.cpp
dom/xul/templates/nsXULTemplateQueryProcessorRDF.h
dom/xul/templates/nsXULTemplateQueryProcessorStorage.cpp
dom/xul/templates/nsXULTemplateQueryProcessorStorage.h
dom/xul/templates/nsXULTemplateQueryProcessorXML.cpp
dom/xul/templates/nsXULTemplateQueryProcessorXML.h
dom/xul/templates/nsXULTemplateResultRDF.cpp
dom/xul/templates/nsXULTemplateResultRDF.h
dom/xul/templates/nsXULTemplateResultSetRDF.cpp
dom/xul/templates/nsXULTemplateResultSetRDF.h
dom/xul/templates/nsXULTemplateResultStorage.cpp
dom/xul/templates/nsXULTemplateResultStorage.h
dom/xul/templates/nsXULTemplateResultXML.cpp
dom/xul/templates/nsXULTemplateResultXML.h
dom/xul/templates/nsXULTreeBuilder.cpp
dom/xul/templates/nsXULTreeBuilder.h
dom/xul/templates/tests/chrome/animals.rdf
dom/xul/templates/tests/chrome/animals.sqlite
dom/xul/templates/tests/chrome/animals.xml
dom/xul/templates/tests/chrome/bug441785-1.rdf
dom/xul/templates/tests/chrome/bug441785-2.rdf
dom/xul/templates/tests/chrome/chrome.ini
dom/xul/templates/tests/chrome/file_bug330010.rdf
dom/xul/templates/tests/chrome/templates_shared.js
dom/xul/templates/tests/chrome/test_bug329335.xul
dom/xul/templates/tests/chrome/test_bug330010.xul
dom/xul/templates/tests/chrome/test_bug397148.xul
dom/xul/templates/tests/chrome/test_bug441785.xul
dom/xul/templates/tests/chrome/test_bug476634.xul
dom/xul/templates/tests/chrome/test_sortservice.xul
dom/xul/templates/tests/chrome/test_tmpl_bindingsextendedsyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_bindingsmultiple.xul
dom/xul/templates/tests/chrome/test_tmpl_bindingsquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_bindingsreversed.xul
dom/xul/templates/tests/chrome/test_tmpl_bindingssameastriple.xul
dom/xul/templates/tests/chrome/test_tmpl_containerandmembervariablechanged.xul
dom/xul/templates/tests/chrome/test_tmpl_containervariablechanged.xul
dom/xul/templates/tests/chrome/test_tmpl_containmentattribute.xul
dom/xul/templates/tests/chrome/test_tmpl_defaultcontainervariableisuri.xul
dom/xul/templates/tests/chrome/test_tmpl_errors.xul
dom/xul/templates/tests/chrome/test_tmpl_extendedsyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxemptyconditions.xul
dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxotherrefvariable.xul
dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxremoveunmatched.xul
dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxsimplevariablesubstitution.xul
dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxtworulesrecurse.xul
dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxusinganinterveningcontainer.xul
dom/xul/templates/tests/chrome/test_tmpl_extendedvariablesubstitution.xul
dom/xul/templates/tests/chrome/test_tmpl_gridelement.xul
dom/xul/templates/tests/chrome/test_tmpl_htmlelementextendedsyntaxwithbinding.xul
dom/xul/templates/tests/chrome/test_tmpl_htmlelementquerysyntaxrecursive.xul
dom/xul/templates/tests/chrome/test_tmpl_htmlelementquerysyntaxwithmultiplerules.xul
dom/xul/templates/tests/chrome/test_tmpl_htmlelementsimplesyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_htmlelementsimplesyntaxusingatextnode.xul
dom/xul/templates/tests/chrome/test_tmpl_invalidqp.xul
dom/xul/templates/tests/chrome/test_tmpl_listboxelement.xul
dom/xul/templates/tests/chrome/test_tmpl_literalasmember.xul
dom/xul/templates/tests/chrome/test_tmpl_membervariablechanged.xul
dom/xul/templates/tests/chrome/test_tmpl_membervariablesubstitution.xul
dom/xul/templates/tests/chrome/test_tmpl_menuelement.xul
dom/xul/templates/tests/chrome/test_tmpl_menuelementrecursive.xul
dom/xul/templates/tests/chrome/test_tmpl_menulistelement.xul
dom/xul/templates/tests/chrome/test_tmpl_mixedsyntaxiscontainer.xul
dom/xul/templates/tests/chrome/test_tmpl_mixedsyntaxiscontainerisempty.xul
dom/xul/templates/tests/chrome/test_tmpl_mixedsyntaxisempty.xul
dom/xul/templates/tests/chrome/test_tmpl_noaction.xul
dom/xul/templates/tests/chrome/test_tmpl_noactionuriattribute.xul
dom/xul/templates/tests/chrome/test_tmpl_parentconditions.xul
dom/xul/templates/tests/chrome/test_tmpl_parentcontenttag.xul
dom/xul/templates/tests/chrome/test_tmpl_parentsimplesyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_query3triples.xul
dom/xul/templates/tests/chrome/test_tmpl_query3tripleswherecontains.xul
dom/xul/templates/tests/chrome/test_tmpl_querymember3tripleswhereequals.xul
dom/xul/templates/tests/chrome/test_tmpl_querymemberandtwotriples.xul
dom/xul/templates/tests/chrome/test_tmpl_querymembertriplemembertriple.xul
dom/xul/templates/tests/chrome/test_tmpl_queryresourcematch.xul
dom/xul/templates/tests/chrome/test_tmpl_queryreversetriple.xul
dom/xul/templates/tests/chrome/test_tmpl_queryselfwithtriple.xul
dom/xul/templates/tests/chrome/test_tmpl_querysetone.xul
dom/xul/templates/tests/chrome/test_tmpl_querysettwo.xul
dom/xul/templates/tests/chrome/test_tmpl_querysettwowithcondition.xul
dom/xul/templates/tests/chrome/test_tmpl_querysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_querysyntaxmultiplerules.xul
dom/xul/templates/tests/chrome/test_tmpl_querysyntaxmultiplerulesfirstconditionall.xul
dom/xul/templates/tests/chrome/test_tmpl_querysyntaxmultiplerulestwoconditions.xul
dom/xul/templates/tests/chrome/test_tmpl_querytripleandmembermerge.xul
dom/xul/templates/tests/chrome/test_tmpl_querytripleobjecttosubject.xul
dom/xul/templates/tests/chrome/test_tmpl_querytwomembers.xul
dom/xul/templates/tests/chrome/test_tmpl_querytwomembersfiltered.xul
dom/xul/templates/tests/chrome/test_tmpl_querytwotriples.xul
dom/xul/templates/tests/chrome/test_tmpl_queryupwardsmember.xul
dom/xul/templates/tests/chrome/test_tmpl_queryupwardsmembertripleandfilteringtriple.xul
dom/xul/templates/tests/chrome/test_tmpl_querywithemptyconditions.xul
dom/xul/templates/tests/chrome/test_tmpl_referenceasmember.xul
dom/xul/templates/tests/chrome/test_tmpl_regenerate.xul
dom/xul/templates/tests/chrome/test_tmpl_selfgenerationextendedsyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_selfgenerationsimplesyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxenclosedinacontainer.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxenclosedinacontainerwitharule.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxfilter.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxfilterwithmultiplerules.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxfilterwithrule.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxiteratingoverasinglevalue.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusinganinterveningcontainer.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingatextnode.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingcontainerasthegenerationelement.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingdontrecurse.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingrecursivegeneration.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingrecursivegenerationagain.xul
dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxwithtwovariablesused.xul
dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutioncaretsatbeginningandend.xul
dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutioncaretsubstitution.xul
dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionnovariable.xul
dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionquestionmarkaspartofvariable.xul
dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionquestionmarksubstitution.xul
dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutiontextandvariable.xul
dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionvariableandtextconcatenated.xul
dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionvariablesconcatenated.xul
dom/xul/templates/tests/chrome/test_tmpl_sortascendinginteger.xul
dom/xul/templates/tests/chrome/test_tmpl_sortascendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortascendingtworulesquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortascendingtworuleswithcontainerquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortascendingtworuleswithdifferentcontainerquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortdescendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortquerymemberandtwotriples.xul
dom/xul/templates/tests/chrome/test_tmpl_sortresource2descendingsimplesyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortresource2settopredicateascendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortresource2settopredicatedescendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortresourceascendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortresourcedescendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortresourcesettopredicateascendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortresourcesettopredicatedescendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sorttworesourcesasstringsettopredicatedescendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sorttworesourcessettopredicateascendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sorttwovariablesascendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sorttwovariablesascendingsimplesyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sorttwovariablesdescendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_sortunknownascendingquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_bad_parameters.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_bad_parameters_2.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_bad_parameters_3.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_baddatasource.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_badquery.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_dynamicparameters.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_listbox.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_multiqueries.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_parameters.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_rule.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_simple.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_sortintegerasc.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_sortintegerdesc.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_sortstringasc.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_sortstringdesc.xul
dom/xul/templates/tests/chrome/test_tmpl_storage_tree.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntax.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxnotrecursive.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxnotrecursivetreebuilder.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursive.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursivemultiplerules.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursivemultiplerulestreebuilder.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursivetreebuilder.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxtreebuilder.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxnotrecursive.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxnotrecursivetreebuilder.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxrecursive.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxrecursivetreebuilder.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementtreecell.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementtreecellsortascending.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementtreecellsortascendingtreebuilder.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementtreecelltreebuilder.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementtreeitemonly.xul
dom/xul/templates/tests/chrome/test_tmpl_treeelementtreeitemsortascending.xul
dom/xul/templates/tests/chrome/test_tmpl_twogenerationnodes.xul
dom/xul/templates/tests/chrome/test_tmpl_whereafterignorecase.xul
dom/xul/templates/tests/chrome/test_tmpl_whereafterlowercase.xul
dom/xul/templates/tests/chrome/test_tmpl_whereafternegation.xul
dom/xul/templates/tests/chrome/test_tmpl_whereafteruppercase.xul
dom/xul/templates/tests/chrome/test_tmpl_wherebeforeignorecase.xul
dom/xul/templates/tests/chrome/test_tmpl_wherebeforelowercase.xul
dom/xul/templates/tests/chrome/test_tmpl_wherebeforenegation.xul
dom/xul/templates/tests/chrome/test_tmpl_wherebeforeuppercase.xul
dom/xul/templates/tests/chrome/test_tmpl_wherecontains.xul
dom/xul/templates/tests/chrome/test_tmpl_wherecontainsignorecase.xul
dom/xul/templates/tests/chrome/test_tmpl_wherecontainsnegation.xul
dom/xul/templates/tests/chrome/test_tmpl_wherecontainsnumber.xul
dom/xul/templates/tests/chrome/test_tmpl_wherecontainsnumberstring.xul
dom/xul/templates/tests/chrome/test_tmpl_wherecontainsresource.xul
dom/xul/templates/tests/chrome/test_tmpl_wherecontainstwo.xul
dom/xul/templates/tests/chrome/test_tmpl_whereendswith.xul
dom/xul/templates/tests/chrome/test_tmpl_whereendswithignorecase.xul
dom/xul/templates/tests/chrome/test_tmpl_whereendswithnegation.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequals.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalsignorecase.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalsmultiple.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalsmultiplenegation.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalsmultiplenegationignorecase.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalsnegation.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalsnegationignorecase.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalsnegationwrongcase.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalsnumber.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalsothervariable.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalsresource.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalssamevariable.xul
dom/xul/templates/tests/chrome/test_tmpl_whereequalswrongcase.xul
dom/xul/templates/tests/chrome/test_tmpl_wheregreater.xul
dom/xul/templates/tests/chrome/test_tmpl_wheregreaternegation.xul
dom/xul/templates/tests/chrome/test_tmpl_wheregreaternegationstring.xul
dom/xul/templates/tests/chrome/test_tmpl_wheregreaterstring.xul
dom/xul/templates/tests/chrome/test_tmpl_whereless.xul
dom/xul/templates/tests/chrome/test_tmpl_wherelessnegation.xul
dom/xul/templates/tests/chrome/test_tmpl_wherelessnegationstring.xul
dom/xul/templates/tests/chrome/test_tmpl_wherelessstring.xul
dom/xul/templates/tests/chrome/test_tmpl_wherenorel.xul
dom/xul/templates/tests/chrome/test_tmpl_wherenosubject.xul
dom/xul/templates/tests/chrome/test_tmpl_wherenovalue.xul
dom/xul/templates/tests/chrome/test_tmpl_wherestartswith.xul
dom/xul/templates/tests/chrome/test_tmpl_wherestartswithignorecase.xul
dom/xul/templates/tests/chrome/test_tmpl_wherestartswithmultiple.xul
dom/xul/templates/tests/chrome/test_tmpl_wherestartswithnegation.xul
dom/xul/templates/tests/chrome/test_tmpl_wherestartswithunknownvariable.xul
dom/xul/templates/tests/chrome/test_tmpl_wherestartswithvariable.xul
dom/xul/templates/tests/chrome/test_tmpl_wheresubjectequalsvariable.xul
dom/xul/templates/tests/chrome/test_tmpl_wheresubjectstartswithvariable.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerysimple.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithassign.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithassignmentandcondition.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithassignmentandconditiondontrecurse.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithbindinginbindings.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithbindinginrule.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithdifferentmember.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithinlinedata.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithinlinedatawithmultiplequeries.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithmultiplequeries.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithothertypes.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithsort.xul
dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithsortotherfield.xul
layout/build/moz.build
layout/xul/nsXULPopupManager.cpp
layout/xul/tree/TreeBoxObject.cpp
layout/xul/tree/nsTreeBodyFrame.cpp
mobile/android/installer/package-manifest.in
testing/crashtest/crashtests.list
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -335,17 +335,16 @@
 @RESPATH@/components/xpcom_components.xpt
 @RESPATH@/components/xpcom_ds.xpt
 @RESPATH@/components/xpcom_io.xpt
 @RESPATH@/components/xpcom_threads.xpt
 @RESPATH@/components/xpcom_xpti.xpt
 @RESPATH@/components/xpconnect.xpt
 @RESPATH@/components/xulapp.xpt
 @RESPATH@/components/xul.xpt
-@RESPATH@/components/xultmpl.xpt
 @RESPATH@/components/zipwriter.xpt
 @RESPATH@/components/telemetry.xpt
 
 ; JavaScript components
 @RESPATH@/components/ConsoleAPI.manifest
 @RESPATH@/components/ConsoleAPIStorage.js
 @RESPATH@/components/BrowserElementParent.manifest
 @RESPATH@/components/BrowserElementParent.js
--- a/dom/tests/mochitest/general/test_interfaces.js
+++ b/dom/tests/mochitest/general/test_interfaces.js
@@ -1270,22 +1270,16 @@ var interfaceNamesInGlobalScope =
     {name: "XULControlElement", xbl: true},
 // IMPORTANT: Do not change this list without review from a DOM peer!
     {name: "XULDocument", xbl: true},
 // IMPORTANT: Do not change this list without review from a DOM peer!
     {name: "XULElement", xbl: true},
 // IMPORTANT: Do not change this list without review from a DOM peer!
     {name: "XULLabeledControlElement", xbl: true},
 // IMPORTANT: Do not change this list without review from a DOM peer!
-    {name: "XULTemplateBuilder", xbl: true},
-// IMPORTANT: Do not change this list without review from a DOM peer!
-    {name: "XULTreeBuilder", xbl: true},
-// IMPORTANT: Do not change this list without review from a DOM peer!
-    {name: "XULTreeBuilderObserver", xbl: true},
-// IMPORTANT: Do not change this list without review from a DOM peer!
   ];
 // IMPORTANT: Do not change the list above without review from a DOM peer!
 
 function createInterfaceMap(isXBLScope) {
   var version = SpecialPowers.Cc["@mozilla.org/xre/app-info;1"].getService(SpecialPowers.Ci.nsIXULAppInfo).version;
   var isNightly = version.endsWith("a1");
   var isRelease = !version.includes("a");
   var isDesktop = !/Mobile|Tablet/.test(navigator.userAgent);
--- a/dom/webidl/LegacyQueryInterface.webidl
+++ b/dom/webidl/LegacyQueryInterface.webidl
@@ -87,9 +87,8 @@ TreeContentView implements LegacyQueryIn
 TreeWalker implements LegacyQueryInterface;
 ValidityState implements LegacyQueryInterface;
 WebSocket implements LegacyQueryInterface;
 Window implements LegacyQueryInterface;
 XMLHttpRequest implements LegacyQueryInterface;
 XMLHttpRequestUpload implements LegacyQueryInterface;
 XMLSerializer implements LegacyQueryInterface;
 XPathEvaluator implements LegacyQueryInterface;
-XULTemplateBuilder implements LegacyQueryInterface;
--- a/dom/webidl/XULElement.webidl
+++ b/dom/webidl/XULElement.webidl
@@ -1,17 +1,15 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 interface XULControllers;
-interface MozRDFCompositeDataSource;
-interface MozRDFResource;
 
 [HTMLConstructor, Func="IsChromeOrXBL"]
 interface XULElement : Element {
   // Layout properties
   [SetterThrows]
   attribute DOMString align;
   [SetterThrows]
   attribute DOMString dir;
@@ -63,38 +61,28 @@ interface XULElement : Element {
   // Position properties for
   // * popups - these are screen coordinates
   // * other elements - these are client coordinates relative to parent stack.
   [SetterThrows]
   attribute DOMString left;
   [SetterThrows]
   attribute DOMString top;
 
-  // XUL Template Builder
-  [SetterThrows]
-  attribute DOMString datasources;
-  [SetterThrows]
-  attribute DOMString ref;
-
   // Tooltip and status info
   [SetterThrows]
   attribute DOMString tooltipText;
   [SetterThrows]
   attribute DOMString statusText;
 
   // Properties for images
   [SetterThrows]
   attribute DOMString src;
 
   attribute boolean allowEvents;
 
-  readonly attribute MozRDFCompositeDataSource? database;
-  readonly attribute XULTemplateBuilder?        builder;
-  [Throws]
-  readonly attribute MozRDFResource?            resource;
   [Throws, ChromeOnly]
   readonly attribute XULControllers             controllers;
   [Throws]
   readonly attribute BoxObject?                 boxObject;
 
   [Throws]
   void                      focus();
   [Throws]
deleted file mode 100644
--- a/dom/webidl/XULTemplateBuilder.webidl
+++ /dev/null
@@ -1,398 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-interface MozRDFCompositeDataSource;
-interface MozRDFResource;
-interface nsISupports;
-interface XULTemplateResult;
-interface XULTemplateRuleFilter;
-
-callback interface XULBuilderListener
-{
-    void willRebuild(XULTemplateBuilder aBuilder);
-    void didRebuild(XULTemplateBuilder aBuilder);
-};
-
-/**
- * A template builder, given an input source of data, a template, and a
- * reference point, generates a list of results from the input, and copies
- * part of the template for each result. Templates may generate content
- * recursively, using the same template, but with the previous iteration's
- * results as the reference point. As an example, for an XML datasource the
- * initial reference point would be a specific node in the DOM tree and a
- * template might generate a list of all child nodes. For the next iteration,
- * those children would be used to generate output for their child nodes and
- * so forth.
- *
- * A template builder is attached to a single DOM node; this node is called
- * the root node and is expected to contain a XUL template element as a direct
- * child. Different template builders may be specialized in the manner in
- * which they generate and display the resulting content from the template.
- *
- * The structure of a template is as follows:
- *
- * <rootnode datasources="" ref="">
- *   <template>
- *     <queryset>
- *       <query>
- *       </query>
- *       <rule>
- *         <conditions>...</conditions>
- *         <bindings>...</bindings>
- *         <action>...</action>
- *       </rule>
- *     </queryset>
- *   </template>
- * </rootnode>
- *
- * The datasources attribute on the root node is used to identify the source
- * of data to be used. The ref attribute is used to specify the reference
- * point for the query. Currently, the datasource will either be an
- * nsIRDFDataSource or a DOM node. In the future, other datasource types may
- * be used.
- *
- * The <queryset> element contains a single query and one or more <rule>
- * elements. There may be more than one <queryset> if multiple queries are
- * desired, and this element is optional if only one query is needed -- in
- * that case the <query> and <rule>s are allowed to be children of the
- * <template> node
- *
- * The contents of the query are processed by a separate component called a
- * query processor. This query processor is expected to use this query to
- * generate results when asked by the template builder. The template builder
- * then generates output for each result based on the <rule> elements.
- *
- * This allows the query processor to be specific to a particular kind of
- * input data or query syntax, while the template builder remains independent
- * of the kind of data being used. Due to this, the query processor will be
- * supplied with the datasource and query which the template builder handles
- * in an opaque way, while the query processor handles these more
- * specifically.
- *
- * Results implement the nsIXULTemplateResult interface and may be identified
- * by an id which must be unique within a given set of query results.
- *
- * Each query may be accompanied by one or more <rule> elements. These rules
- * are evaluated by the template builder for each result produced by the
- * query. A rule consists of conditions that cause a rule to be either
- * accepted or rejected. The condition syntax allows for common conditional
- * handling; additional filtering may be applied by adding a custom filter
- * to a rule with the builder's addRuleFilter method.
- *
- * If a result passes a rule's conditions, this is considered a match, and the
- * content within the rule's <action> body is inserted as a sibling of the
- * <template>, assuming the template builder creates real DOM content. Only
- * one rule will match a result. For a tree builder, for example, the content
- * within the action body is used to create the tree rows instead. A matching
- * result must have its ruleMatched method called. When a result no longer
- * matches, the result's hasBeenRemoved method must be called.
- *
- * Optionally, the rule may have a <bindings> section which may be used to
- * define additional variables to be used within an action body. Each of these
- * declared bindings must be supplied to the query processor via its
- * addBinding method. The bindings are evaluated after a rule has matched.
- *
- * Templates may generate content recursively, using the previous iteration's
- * results as reference point to invoke the same queries. Since the reference
- * point is different, different output will typically be generated.
- *
- * The reference point nsIXULTemplateResult object for the first iteration is
- * determined by calling the query processor's translateRef method using the
- * value of the root node's ref attribute. This object may be retrieved later
- * via the builder's rootResult property.
- *
- * For convenience, each reference point as well as all results implement the
- * nsIXULTemplateResult interface, allowing the result objects from each
- * iteration to be used directly as the reference points for the next
- * iteration.
- *
- * When using multiple queries, each may generate results with the same id.
- * More than one of these results may match one of the rules in their
- * respective queries, however only the result for the earliest matching query
- * in the template becomes the active match and generates output. The
- * addResult, removeResult, replaceResult and resultBindingChanged methods may
- * be called by the query processor to indicate that the set of valid results
- * has changed, such that a different query may match. If a different match
- * would become active, the content for the existing match is removed and the
- * content for the new match is generated. A query processor is not required
- * to provide any support for updating results after they have been generated.
- *
- * See http://wiki.mozilla.org/XUL:Templates_Plan for details about templates.
- */
-[Func="IsChromeOrXBL"]
-interface XULTemplateBuilder
-{
-    /**
-     * The root node in the DOM to which this builder is attached.
-     */
-    readonly attribute Element? root;
-
-    /**
-     * The opaque datasource object that is used for the template. This object
-     * is created by the getDataSource method of the query processor. May be
-     * null if the datasource has not been loaded yet. Set this attribute to
-     * use a different datasource and rebuild the template.
-     *
-     * For an RDF datasource, this will be the same as the database. For XML
-     * this will be the nsIDOMNode for the datasource document or node for
-     * an inline reference (such as #name). Other query processors may use
-     * other types for the datasource.
-     */
-    [SetterThrows]
-    attribute nsISupports? datasource;
-
-    /**
-     * The composite datasource that the template builder observes
-     * and uses to create content. This is used only for RDF queries and is
-     * maintained for backwards compatibility. It will be the same object as
-     * the datasource property. For non-RDF queries, it will always be null.
-     */
-    readonly attribute MozRDFCompositeDataSource? database;
-
-    /**
-     * The virtual result representing the starting reference point,
-     * determined by calling the query processor's translateRef method
-     * with the root node's ref attribute as an argument.
-     */
-    readonly attribute XULTemplateResult? rootResult;
-
-    /**
-     * Force the template builder to rebuild its content. All existing content
-     * will be removed first. The query processor's done() method will be
-     * invoked during cleanup, followed by its initializeForBuilding method
-     * when the content is to be regenerated.
-     * 
-     */
-    [Throws]
-    void rebuild();
-
-    /**
-     * Reload any of our RDF datasources that support nsIRDFRemoteDatasource. 
-     *
-     * @note This is a temporary hack so that remote-XUL authors can
-     *       reload remote datasources. When RDF becomes remote-scriptable,
-     *       this will no longer be necessary.
-     */
-    [Throws]
-    void refresh();
-
-    /**
-     * Inform the template builder that a new result is available. The builder
-     * will add this result to the set of results. The query node that the
-     * new result applies to must be specified using the aQueryNode parameter.
-     *
-     * The builder will apply the rules associated with the query to the new
-     * result, unless a result with the same id from an earlier query
-     * supersedes it, and the result's RuleMatched method will be called if it
-     * matches.
-     *
-     * @param aResult the result to add
-     * @param aQueryNode the query that the result applies to
-     */
-    [Throws]
-    void addResult(XULTemplateResult aResult, Node aQueryNode);
-
-    /**
-     * Inform the template builder that a result no longer applies. The builder
-     * will call the remove content generated for the result, if any. If a
-     * different query would then match instead, it will become the active
-     * match. This method will have no effect if the result isn't known to the
-     * builder.
-     *
-     * @param aResult the result to remove
-     *
-     * @throws NS_ERROR_NULL_POINTER if aResult is null
-     */
-    [Throws]
-    void removeResult(XULTemplateResult aResult);
-
-    /**
-     * Inform the template builder that one result should be replaced with
-     * another. Both the old result (aOldResult) and the new result
-     * (aNewResult) must have the same id. The query node that the new result
-     * applies to must be specified using the aQueryNode parameter.
-     *
-     * This method is expected to have the same effect as calling both
-     * removeResult for the old result and addResult for the new result.
-     *
-     * @param aOldResult the old result
-     * @param aNewResult the new result
-     * @param aQueryNode the query that the new result applies to
-     *
-     * @throws NS_ERROR_NULL_POINTER if either argument is null, or
-     *         NS_ERROR_INVALID_ARG if the ids don't match
-     */
-    [Throws]
-    void replaceResult(XULTemplateResult aOldResult,
-                       XULTemplateResult aNewResult,
-                       Node aQueryNode);
-
-    /**
-     * Inform the template builder that one or more of the optional bindings
-     * for a result has changed. In this case, the rules are not reapplied as
-     * it is expected that the same rule will still apply. The builder will
-     * resynchronize any variables that are referenced in the action body.
-     *
-     * @param aResult the result to change
-     *
-     * @throws NS_ERROR_NULL_POINTER if aResult is null
-     */
-    [Throws]
-    void resultBindingChanged(XULTemplateResult aResult);
-
-    /**
-     * Return the result for a given id. Only one such result is returned and
-     * is always the result with that id associated with the active match.
-     * This method will return null is there is no result for the id.
-     *
-     * @param aId the id to return the result for
-     */
-    [Throws]
-    XULTemplateResult? getResultForId(DOMString aId);
-
-    /**
-     * Retrieve the result corresponding to a generated element, or null is
-     * there isn't one.
-     *
-     * @param aContent element to result the result of
-     */
-    XULTemplateResult? getResultForContent(Element aElement);
-
-    /**
-     * Returns true if the node has content generated for it. This method is
-     * intended to be called only by the RDF query processor. If aTag is set,
-     * the content must have a tag name that matches aTag. aTag may be ignored
-     * for builders that don't generate real DOM content.
-     *
-     * @param aNode node to check
-     * @param aTag tag that must match
-     */
-    [Throws]
-    boolean hasGeneratedContent(MozRDFResource aNode, DOMString? aTag);
-
-    /**
-     * Adds a rule filter for a given rule, which may be used for specialized
-     * rule filtering. Any existing filter on the rule is removed. The default
-     * conditions specified inside the <rule> tag are applied before the
-     * rule filter is applied, meaning that the filter may be used to further
-     * filter out results but not reaccept results that have already been
-     * rejected.
-     *
-     * @param aRule the rule to apply the filter to
-     * @param aFilter the filter to add
-     */
-    [Throws]
-    void addRuleFilter(Node aRule, XULTemplateRuleFilter aFilter);
-
-    /**
-     * Add a listener to this template builder. The template builder
-     * holds a strong reference to the listener.
-     */
-    void addListener(XULBuilderListener aListener);
-
-    /**
-     * Remove a listener from this template builder.
-     */
-    void removeListener(XULBuilderListener aListener);
-};
-
-/**
- *  XULTreeBuilderObserver
- *  This interface allows clients of the XULTreeBuilder to define domain 
- *  specific handling of specific nsITreeView methods that 
- *  XULTreeBuilder does not implement.
- */
-[Func="IsChromeOrXBL"]
-callback interface XULTreeBuilderObserver
-{
-    const long DROP_BEFORE = -1;
-    const long DROP_ON = 0;
-    const long DROP_AFTER = 1;
-    /**
-     * Methods used by the drag feedback code to determine if a drag is
-     * allowable at the current location. To get the behavior where drops are
-     * only allowed on items, such as the mailNews folder pane, always return
-     * false when the orientation is not DROP_ON.
-     */
-    boolean canDrop(long index, long orientation, DataTransfer? dataTransfer);
-
-    /**
-     * Called when the user drops something on this view. The |orientation|
-     * param specifies before/on/after the given |row|.
-     */
-    void onDrop(long row, long orientation, DataTransfer? dataTransfer);
- 
-    /** 
-     * Called when an item is opened or closed. 
-     */
-    void onToggleOpenState(long index);
-
-    /** 
-	 * Called when a header is clicked.
-     */
-    void onCycleHeader(DOMString colID, Element? elt);
-
-    /**
-     * Called when a cell in a non-selectable cycling column (e.g. 
-     * unread/flag/etc.) is clicked.
-     */
-    void onCycleCell(long row, DOMString colID);
-
-    /** 
-     * Called when selection in the tree changes
-     */
-    void onSelectionChanged();
-
-    /**
-     * A command API that can be used to invoke commands on the selection.  
-     * The tree will automatically invoke this method when certain keys 
-     * are pressed.  For example, when the DEL key is pressed, performAction 
-     * will be called with the "delete" string. 
-     */
-    void onPerformAction(DOMString action);
-
-    /**
-     * A command API that can be used to invoke commands on a specific row.
-     */
-    void onPerformActionOnRow(DOMString action, long row);
-
-    /**
-     * A command API that can be used to invoke commands on a specific cell.
-     */
-    void onPerformActionOnCell(DOMString action, long row, DOMString colID);
-};
-
-[Func="IsChromeOrXBL"]
-interface XULTreeBuilder : XULTemplateBuilder
-{
-    /**
-     * Retrieve the RDF resource associated with the specified row.
-     */
-    [Throws]
-    MozRDFResource? getResourceAtIndex(long aRowIndex);
-
-    /**
-     * Retrieve the index associated with specified RDF resource.
-     */
-    [Throws]
-    long getIndexOfResource(MozRDFResource resource);
-
-    /** 
-     * Add a Tree Builder Observer to handle Tree View 
-     * methods that the base builder does not implement. 
-     */
-    void addObserver(XULTreeBuilderObserver aObserver);
-
-    /** 
-     * Remove an Tree Builder Observer.
-     */
-    void removeObserver(XULTreeBuilderObserver aObserver);
-
-    /** 
-     * Sort the contents of the tree using the specified column.
-     */
-    void sort(Element aColumnElement);
-};
-XULTreeBuilder implements TreeView;
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -966,17 +966,16 @@ WEBIDL_FILES = [
     'XPathEvaluator.webidl',
     'XPathExpression.webidl',
     'XPathNSResolver.webidl',
     'XPathResult.webidl',
     'XSLTProcessor.webidl',
     'XULCommandEvent.webidl',
     'XULDocument.webidl',
     'XULElement.webidl',
-    'XULTemplateBuilder.webidl',
 ]
 
 if CONFIG['MOZ_WEBRTC']:
     WEBIDL_FILES += [
         'DataChannel.webidl',
         'PeerConnectionImpl.webidl',
         'PeerConnectionImplEnums.webidl',
         'PeerConnectionObserver.webidl',
--- a/dom/xul/XULDocument.cpp
+++ b/dom/xul/XULDocument.cpp
@@ -46,24 +46,24 @@
 #include "nsPIBoxObject.h"
 #include "mozilla/dom/BoxObject.h"
 #include "nsString.h"
 #include "nsPIDOMWindow.h"
 #include "nsPIWindowRoot.h"
 #include "nsXULCommandDispatcher.h"
 #include "nsXULElement.h"
 #include "mozilla/Logging.h"
-#include "rdf.h"
 #include "nsIFrame.h"
 #include "nsXBLService.h"
 #include "nsCExternalHandlerService.h"
 #include "nsMimeTypes.h"
 #include "nsIObjectInputStream.h"
 #include "nsIObjectOutputStream.h"
 #include "nsContentList.h"
+#include "nsISimpleEnumerator.h"
 #include "nsIScriptGlobalObject.h"
 #include "nsIScriptSecurityManager.h"
 #include "nsNodeInfoManager.h"
 #include "nsContentCreatorFunctions.h"
 #include "nsContentUtils.h"
 #include "nsIParser.h"
 #include "nsCharsetSource.h"
 #include "mozilla/StyleSheetInlines.h"
@@ -90,18 +90,16 @@
 #include "nsTextNode.h"
 #include "nsJSUtils.h"
 #include "mozilla/dom/URL.h"
 #include "nsIContentPolicy.h"
 #include "mozAutoDocUpdate.h"
 #include "xpcpublic.h"
 #include "mozilla/StyleSheet.h"
 #include "mozilla/StyleSheetInlines.h"
-#include "nsXULTemplateBuilder.h"
-#include "nsXULTreeBuilder.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
 
 //----------------------------------------------------------------------
 //
 // CIDs
 //
@@ -192,17 +190,16 @@ namespace dom {
 XULDocument::XULDocument(void)
     : XMLDocument("application/vnd.mozilla.xul+xml"),
       mNextSrcLoadWaiter(nullptr),
       mApplyingPersistedAttrs(false),
       mIsWritingFastLoad(false),
       mDocumentLoaded(false),
       mStillWalking(false),
       mRestrictPersistence(false),
-      mTemplateBuilderTable(nullptr),
       mPendingSheets(0),
       mDocLWTheme(Doc_Theme_Uninitialized),
       mState(eState_Master),
       mCurrentScriptProto(nullptr),
       mOffThreadCompiling(false),
       mOffThreadCompileStringBuf(nullptr),
       mOffThreadCompileStringLength(0),
       mResolutionPhase(nsForwardReference::eStart),
@@ -232,18 +229,16 @@ XULDocument::~XULDocument()
     mForwardReferences.Clear();
     // Likewise for any references we have to IDs where we might
     // look for persisted data:
     mPersistenceIds.Clear();
 
     // Destroy our broadcaster map.
     delete mBroadcasterMap;
 
-    delete mTemplateBuilderTable;
-
     Preferences::UnregisterCallback(XULDocument::DirectionChanged,
                                     "intl.uidirection", this);
 
     if (mOffThreadCompileStringBuf) {
       js_free(mOffThreadCompileStringBuf);
     }
 }
 
@@ -280,29 +275,16 @@ namespace dom {
 NS_IMPL_CYCLE_COLLECTION_CLASS(XULDocument)
 
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(XULDocument, XMLDocument)
     NS_ASSERTION(!nsCCUncollectableMarker::InGeneration(cb, tmp->GetMarkedCCGeneration()),
                  "Shouldn't traverse XULDocument!");
     // XXX tmp->mForwardReferences?
     // XXX tmp->mContextStack?
 
-    // An element will only have a template builder as long as it's in the
-    // document, so we'll traverse the table here instead of from the element.
-    if (tmp->mTemplateBuilderTable) {
-        for (auto iter = tmp->mTemplateBuilderTable->Iter();
-             !iter.Done();
-             iter.Next()) {
-            NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mTemplateBuilderTable key");
-            cb.NoteXPCOMChild(iter.Key());
-            NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mTemplateBuilderTable value");
-            cb.NoteXPCOMChild(iter.UserData());
-        }
-    }
-
     NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCurrentPrototype)
     NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMasterPrototype)
     NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCommandDispatcher)
     NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPrototypes)
     NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mLocalStore)
 
     if (tmp->mOverlayLoadObservers) {
         for (auto iter = tmp->mOverlayLoadObservers->Iter();
@@ -318,19 +300,16 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
              iter.Next()) {
             NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mPendingOverlayLoadNotifications value");
             cb.NoteXPCOMChild(iter.Data());
         }
     }
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(XULDocument, XMLDocument)
-    delete tmp->mTemplateBuilderTable;
-    tmp->mTemplateBuilderTable = nullptr;
-
     NS_IMPL_CYCLE_COLLECTION_UNLINK(mCommandDispatcher)
     NS_IMPL_CYCLE_COLLECTION_UNLINK(mLocalStore)
     //XXX We should probably unlink all the objects we traverse.
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
 NS_IMPL_ISUPPORTS_CYCLE_COLLECTION_INHERITED(XULDocument,
                                              XMLDocument,
                                              nsIXULDocument,
@@ -1662,36 +1641,16 @@ XULDocument::AddElementToDocumentPost(El
     }
 
     // We need to pay special attention to the keyset tag to set up a listener
     if (aElement->NodeInfo()->Equals(nsGkAtoms::keyset, kNameSpaceID_XUL)) {
         // Create our XUL key listener and hook it up.
         nsXBLService::AttachGlobalKeyHandler(aElement);
     }
 
-    // See if we need to attach a XUL template to this node
-    bool needsHookup;
-    nsresult rv = CheckTemplateBuilderHookup(aElement, &needsHookup);
-    if (NS_FAILED(rv))
-        return rv;
-
-    if (needsHookup) {
-        if (mResolutionPhase == nsForwardReference::eDone) {
-            rv = CreateTemplateBuilder(aElement);
-            if (NS_FAILED(rv))
-                return rv;
-        }
-        else {
-            TemplateBuilderHookup* hookup = new TemplateBuilderHookup(aElement);
-            rv = AddForwardReference(hookup);
-            if (NS_FAILED(rv))
-                return rv;
-        }
-    }
-
     return NS_OK;
 }
 
 NS_IMETHODIMP
 XULDocument::AddSubtreeToDocument(nsIContent* aContent)
 {
     NS_ASSERTION(aContent->GetUncomposedDoc() == this, "Element not in doc!");
     // From here on we only care about elements.
@@ -1779,50 +1738,16 @@ XULDocument::RemoveSubtreeFromDocument(n
                          broadcasterID, attribute, getter_AddRefs(broadcaster));
     if (rv == NS_FINDBROADCASTER_FOUND) {
         RemoveBroadcastListenerFor(*broadcaster, *listener, attribute);
     }
 
     return NS_OK;
 }
 
-NS_IMETHODIMP
-XULDocument::SetTemplateBuilderFor(nsIContent* aContent,
-                                   nsIXULTemplateBuilder* aBuilder)
-{
-    if (! mTemplateBuilderTable) {
-        if (!aBuilder) {
-            return NS_OK;
-        }
-        mTemplateBuilderTable = new BuilderTable;
-    }
-
-    if (aBuilder) {
-        mTemplateBuilderTable->Put(aContent, aBuilder);
-    }
-    else {
-        mTemplateBuilderTable->Remove(aContent);
-    }
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-XULDocument::GetTemplateBuilderFor(nsIContent* aContent,
-                                   nsIXULTemplateBuilder** aResult)
-{
-    if (mTemplateBuilderTable) {
-        mTemplateBuilderTable->Get(aContent, aResult);
-    }
-    else
-        *aResult = nullptr;
-
-    return NS_OK;
-}
-
 static void
 GetRefMapAttribute(Element* aElement, nsAutoString* aValue)
 {
     aElement->GetAttr(kNameSpaceID_None, nsGkAtoms::ref, *aValue);
 }
 
 nsresult
 XULDocument::AddElementToRefMap(Element* aElement)
@@ -3626,105 +3551,16 @@ XULDocument::AddAttributes(nsXULPrototyp
         if (NS_FAILED(rv)) return rv;
     }
 
     return NS_OK;
 }
 
 
 nsresult
-XULDocument::CheckTemplateBuilderHookup(Element* aElement,
-                                        bool* aNeedsHookup)
-{
-    // See if the element already has a `database' attribute. If it
-    // does, then the template builder has already been created.
-    //
-    // XXX This approach will crash and burn (well, maybe not _that_
-    // bad) if aElement is not a XUL element.
-    //
-    // XXXvarga Do we still want to support non XUL content?
-    RefPtr<nsXULElement> xulElement = nsXULElement::FromContent(aElement);
-    if (xulElement) {
-        nsCOMPtr<nsIRDFCompositeDataSource> ds = xulElement->GetDatabase();
-        if (ds) {
-            *aNeedsHookup = false;
-            return NS_OK;
-        }
-    }
-
-    // Check aElement for a 'datasources' attribute, if it has
-    // one a XUL template builder needs to be hooked up.
-    *aNeedsHookup = aElement->HasAttr(kNameSpaceID_None,
-                                      nsGkAtoms::datasources);
-    return NS_OK;
-}
-
-/* static */ nsresult
-XULDocument::CreateTemplateBuilder(Element* aElement)
-{
-    // Check if need to construct a tree builder or content builder.
-    bool isTreeBuilder = false;
-
-    // return successful if the element is not is a document, as an inline
-    // script could have removed it
-    nsIDocument* document = aElement->GetUncomposedDoc();
-    NS_ENSURE_TRUE(document, NS_OK);
-
-    int32_t nameSpaceID;
-    nsAtom* baseTag = document->BindingManager()->
-      ResolveTag(aElement, &nameSpaceID);
-
-    if ((nameSpaceID == kNameSpaceID_XUL) && (baseTag == nsGkAtoms::tree)) {
-        // By default, we build content for a tree and then we attach
-        // the tree content view. However, if the `dont-build-content'
-        // flag is set, then we we'll attach a tree builder which
-        // directly implements the tree view.
-
-        nsAutoString flags;
-        aElement->GetAttr(kNameSpaceID_None, nsGkAtoms::flags, flags);
-        if (flags.Find(NS_LITERAL_STRING("dont-build-content")) >= 0) {
-            isTreeBuilder = true;
-        }
-    }
-
-    if (isTreeBuilder) {
-        // Create and initialize a tree builder.
-        RefPtr<nsXULTreeBuilder> builder = new nsXULTreeBuilder(aElement);
-        nsresult rv = builder->Init();
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        // Create a <treechildren> if one isn't there already.
-        // XXXvarga what about attributes?
-        RefPtr<Element> bodyContent;
-        nsXULContentUtils::FindChildByTag(aElement, kNameSpaceID_XUL,
-                                          nsGkAtoms::treechildren,
-                                          getter_AddRefs(bodyContent));
-
-        if (!bodyContent) {
-            bodyContent =
-                document->CreateElem(nsDependentAtomString(nsGkAtoms::treechildren),
-                                     nullptr, kNameSpaceID_XUL);
-
-            aElement->AppendChildTo(bodyContent, false);
-        }
-    }
-    else {
-        // Create and initialize a content builder.
-        nsCOMPtr<nsIXULTemplateBuilder> builder;
-        nsresult rv = NS_NewXULContentBuilder(aElement, getter_AddRefs(builder));
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        builder->CreateContents(aElement, false);
-    }
-
-    return NS_OK;
-}
-
-
-nsresult
 XULDocument::AddPrototypeSheets()
 {
     nsresult rv;
 
     const nsCOMArray<nsIURI>& sheets = mCurrentPrototype->GetStyleSheetReferences();
 
     for (int32_t i = 0; i < sheets.Count(); i++) {
         nsCOMPtr<nsIURI> uri = sheets[i];
@@ -4029,40 +3865,16 @@ XULDocument::BroadcasterHookup::~Broadca
         MOZ_LOG(gXULLog, LogLevel::Warning,
                ("xul: broadcaster hookup failed <%s attribute='%s'> to %s",
                 nsAtomCString(mObservesElement->NodeInfo()->NameAtom()).get(),
                 attributeC.get(),
                 broadcasteridC.get()));
     }
 }
 
-
-//----------------------------------------------------------------------
-//
-// XULDocument::TemplateBuilderHookup
-//
-
-nsForwardReference::Result
-XULDocument::TemplateBuilderHookup::Resolve()
-{
-    bool needsHookup;
-    nsresult rv = CheckTemplateBuilderHookup(mElement, &needsHookup);
-    if (NS_FAILED(rv))
-        return eResolve_Error;
-
-    if (needsHookup) {
-        rv = CreateTemplateBuilder(mElement);
-        if (NS_FAILED(rv))
-            return eResolve_Error;
-    }
-
-    return eResolve_Succeeded;
-}
-
-
 //----------------------------------------------------------------------
 
 nsresult
 XULDocument::BroadcastAttributeChangeFromOverlay(nsIContent* aNode,
                                                  int32_t aNameSpaceID,
                                                  nsAtom* aAttribute,
                                                  nsAtom* aPrefix,
                                                  const nsAString& aValue)
--- a/dom/xul/XULDocument.h
+++ b/dom/xul/XULDocument.h
@@ -125,20 +125,16 @@ public:
     NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTEWILLCHANGE
 
     // nsIXULDocument interface
     virtual void GetElementsForID(const nsAString& aID,
                                   nsCOMArray<mozilla::dom::Element>& aElements) override;
 
     NS_IMETHOD AddSubtreeToDocument(nsIContent* aContent) override;
     NS_IMETHOD RemoveSubtreeFromDocument(nsIContent* aContent) override;
-    NS_IMETHOD SetTemplateBuilderFor(nsIContent* aContent,
-                                     nsIXULTemplateBuilder* aBuilder) override;
-    NS_IMETHOD GetTemplateBuilderFor(nsIContent* aContent,
-                                     nsIXULTemplateBuilder** aResult) override;
     NS_IMETHOD OnPrototypeLoadDone(bool aResumeWalk) override;
     bool OnDocumentParserError() override;
 
     // nsINode interface overrides
     virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult,
                            bool aPreallocateChildren) const override;
 
     // nsIDOMNode interface
@@ -347,22 +343,16 @@ protected:
     /**
      * An array of style sheets, that will be added (preserving order) to the
      * document after all of them are loaded (in DoneWalking).
      */
     nsTArray<RefPtr<StyleSheet>> mOverlaySheets;
 
     nsCOMPtr<nsIDOMXULCommandDispatcher>     mCommandDispatcher; // [OWNER] of the focus tracker
 
-    // Maintains the template builders that have been attached to
-    // content elements
-    typedef nsInterfaceHashtable<nsISupportsHashKey, nsIXULTemplateBuilder>
-        BuilderTable;
-    BuilderTable* mTemplateBuilderTable;
-
     uint32_t mPendingSheets;
 
     /**
      * document lightweight theme for use with :-moz-lwtheme, :-moz-lwtheme-brighttext
      * and :-moz-lwtheme-darktext
      */
     DocumentTheme                         mDocLWTheme;
 
@@ -464,28 +454,16 @@ protected:
     /**
      * If the current transcluded script is being compiled off thread, the
      * source for that script.
      */
     char16_t* mOffThreadCompileStringBuf;
     size_t mOffThreadCompileStringLength;
 
     /**
-     * Check if a XUL template builder has already been hooked up.
-     */
-    static nsresult
-    CheckTemplateBuilderHookup(mozilla::dom::Element* aElement, bool* aNeedsHookup);
-
-    /**
-     * Create a XUL template builder on the specified node.
-     */
-    static nsresult
-    CreateTemplateBuilder(Element* aElement);
-
-    /**
      * Add the current prototype's style sheets (currently it's just
      * style overlays from the chrome registry) to the document.
      */
     nsresult AddPrototypeSheets();
 
 
 protected:
     /* Declarations related to forward references.
@@ -562,31 +540,16 @@ protected:
         virtual ~OverlayForwardReference();
 
         virtual Phase GetPhase() override { return eConstruction; }
         virtual Result Resolve() override;
     };
 
     friend class OverlayForwardReference;
 
-    class TemplateBuilderHookup : public nsForwardReference
-    {
-    protected:
-        nsCOMPtr<Element> mElement; // [OWNER]
-
-    public:
-        explicit TemplateBuilderHookup(Element* aElement)
-            : mElement(aElement) {}
-
-        virtual Phase GetPhase() override { return eHookup; }
-        virtual Result Resolve() override;
-    };
-
-    friend class TemplateBuilderHookup;
-
     // The out params of FindBroadcaster only have values that make sense when
     // the method returns NS_FINDBROADCASTER_FOUND.  In all other cases, the
     // values of the out params should not be relied on (though *aListener and
     // *aBroadcaster do need to be released if non-null, of course).
     nsresult
     FindBroadcaster(Element* aElement,
                     Element** aListener,
                     nsString& aBroadcasterID,
--- a/dom/xul/moz.build
+++ b/dom/xul/moz.build
@@ -7,55 +7,55 @@
 with Files("**"):
     BUG_COMPONENT = ("Core", "XUL")
 
 MOCHITEST_MANIFESTS += ['test/mochitest.ini']
 
 MOCHITEST_CHROME_MANIFESTS += ['test/chrome.ini']
 
 if CONFIG['MOZ_XUL']:
-    DIRS += ['templates']
-
     XPIDL_SOURCES += [
         'nsIXULOverlayProvider.idl',
     ]
 
     EXPORTS += [
         'nsIXULDocument.h',
         'nsXULElement.h',
     ]
 
     UNIFIED_SOURCES += [
         'nsXULCommandDispatcher.cpp',
         'nsXULContentSink.cpp',
+        'nsXULContentUtils.cpp',
         'nsXULElement.cpp',
         'nsXULPopupListener.cpp',
         'nsXULPrototypeCache.cpp',
         'nsXULPrototypeDocument.cpp',
+        'nsXULSortService.cpp',
         'XULDocument.cpp',
     ]
 
 XPIDL_SOURCES += [
     'nsIController.idl',
     'nsIControllers.idl',
+    'nsIXULSortService.idl',
 ]
 
 XPIDL_MODULE = 'xul'
 
 UNIFIED_SOURCES += [
     'nsXULControllers.cpp',
 ]
 
 LOCAL_INCLUDES += [
     '/docshell/base',
     '/dom/base',
     '/dom/html',
     '/dom/xbl',
     '/dom/xml',
-    '/dom/xul/templates',
     '/layout/base',
     '/layout/generic',
     '/layout/style',
     '/layout/xul',
 ]
 
 FINAL_LIBRARY = 'xul'
 
--- a/dom/xul/nsIXULDocument.h
+++ b/dom/xul/nsIXULDocument.h
@@ -49,29 +49,16 @@ public:
   NS_IMETHOD AddSubtreeToDocument(nsIContent* aElement) = 0;
 
   /**
    * Notify the XUL document that a subtree has been removed
    */
   NS_IMETHOD RemoveSubtreeFromDocument(nsIContent* aElement) = 0;
 
   /**
-   * Attach a XUL template builder to the specified content node.
-   * @param aBuilder the template builder to attach, or null if
-   *   the builder is to be removed.
-   */
-  NS_IMETHOD SetTemplateBuilderFor(nsIContent* aContent, nsIXULTemplateBuilder* aBuilder) = 0;
-
-  /**
-   * Retrieve the XUL template builder that's attached to a content
-   * node.
-   */
-  NS_IMETHOD GetTemplateBuilderFor(nsIContent* aContent, nsIXULTemplateBuilder** aResult) = 0;
-
-  /**
    * This is invoked whenever the prototype for this document is loaded
    * and should be walked, regardless of whether the XUL cache is
    * disabled, whether the protototype was loaded, whether the
    * prototype was loaded from the cache or created by parsing the
    * actual XUL source, etc.
    *
    * @param aResumeWalk whether this should also call ResumeWalk().
    * Sometimes the caller of OnPrototypeLoadDone resumes the walk itself
rename from dom/xul/templates/nsIXULSortService.idl
rename to dom/xul/nsIXULSortService.idl
rename from dom/xul/templates/nsXULContentUtils.cpp
rename to dom/xul/nsXULContentUtils.cpp
--- a/dom/xul/templates/nsXULContentUtils.cpp
+++ b/dom/xul/nsXULContentUtils.cpp
@@ -8,101 +8,60 @@
 /*
 
   A package of routines shared by the XUL content code.
 
  */
 
 #include "mozilla/ArrayUtils.h"
 
-#include "DateTimeFormat.h"
+#include "nsCollationCID.h"
 #include "nsCOMPtr.h"
 #include "nsIContent.h"
+#include "nsICollation.h"
 #include "nsIDocument.h"
 #include "nsIDOMElement.h"
 #include "nsIDOMXULCommandDispatcher.h"
 #include "nsIDOMXULDocument.h"
-#include "nsIRDFNode.h"
 #include "nsIRDFService.h"
 #include "nsIServiceManager.h"
-#include "nsIURL.h"
 #include "nsXULContentUtils.h"
 #include "nsLayoutCID.h"
-#include "nsNameSpaceManager.h"
 #include "nsRDFCID.h"
 #include "nsString.h"
 #include "nsGkAtoms.h"
-#include "mozilla/Logging.h"
-#include "prtime.h"
-#include "rdf.h"
-#include "nsContentUtils.h"
-#include "nsICollation.h"
-#include "nsCollationCID.h"
-#include "nsIConsoleService.h"
-#include "nsEscape.h"
 
 using namespace mozilla;
 
 //------------------------------------------------------------------------
 
 nsIRDFService* nsXULContentUtils::gRDF;
 nsICollation *nsXULContentUtils::gCollation;
 
-extern LazyLogModule gXULTemplateLog;
-
-#define XUL_RESOURCE(ident, uri) nsIRDFResource* nsXULContentUtils::ident
-#define XUL_LITERAL(ident, val) nsIRDFLiteral* nsXULContentUtils::ident
-#include "nsXULResourceList.h"
-#undef XUL_RESOURCE
-#undef XUL_LITERAL
-
 //------------------------------------------------------------------------
 // Constructors n' stuff
 //
 
 nsresult
 nsXULContentUtils::Init()
 {
     static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
     nsresult rv = CallGetService(kRDFServiceCID, &gRDF);
     if (NS_FAILED(rv)) {
         return rv;
     }
 
-#define XUL_RESOURCE(ident, uri)                              \
-  PR_BEGIN_MACRO                                              \
-   rv = gRDF->GetResource(NS_LITERAL_CSTRING(uri), &(ident)); \
-   if (NS_FAILED(rv)) return rv;                              \
-  PR_END_MACRO
-
-#define XUL_LITERAL(ident, val)                                   \
-  PR_BEGIN_MACRO                                                  \
-   rv = gRDF->GetLiteral(val, &(ident));                          \
-   if (NS_FAILED(rv)) return rv;                                  \
-  PR_END_MACRO
-
-#include "nsXULResourceList.h"
-#undef XUL_RESOURCE
-#undef XUL_LITERAL
-
     return NS_OK;
 }
 
 
 nsresult
 nsXULContentUtils::Finish()
 {
     NS_IF_RELEASE(gRDF);
-
-#define XUL_RESOURCE(ident, uri) NS_IF_RELEASE(ident)
-#define XUL_LITERAL(ident, val) NS_IF_RELEASE(ident)
-#include "nsXULResourceList.h"
-#undef XUL_RESOURCE
-#undef XUL_LITERAL
-
     NS_IF_RELEASE(gCollation);
 
     return NS_OK;
 }
 
 nsICollation*
 nsXULContentUtils::GetCollation()
 {
@@ -115,17 +74,19 @@ nsXULContentUtils::GetCollation()
                          "couldn't create collation instance");
         } else
             NS_ERROR("couldn't create instance of collation factory");
     }
 
     return gCollation;
 }
 
+
 //------------------------------------------------------------------------
+//
 
 nsresult
 nsXULContentUtils::FindChildByTag(nsIContent* aElement,
                                   int32_t aNameSpaceID,
                                   nsAtom* aTag,
                                   Element** aResult)
 {
     for (nsIContent* child = aElement->GetFirstChild();
@@ -138,133 +99,16 @@ nsXULContentUtils::FindChildByTag(nsICon
             return NS_OK;
         }
     }
 
     *aResult = nullptr;
     return NS_RDF_NO_VALUE; // not found
 }
 
-
-/*
-	Note: this routine is similar, yet distinctly different from, nsBookmarksService::GetTextForNode
-*/
-
-nsresult
-nsXULContentUtils::GetTextForNode(nsIRDFNode* aNode, nsAString& aResult)
-{
-    if (! aNode) {
-        aResult.Truncate();
-        return NS_OK;
-    }
-
-    nsresult rv;
-
-    // Literals are the most common, so try these first.
-    nsCOMPtr<nsIRDFLiteral> literal = do_QueryInterface(aNode);
-    if (literal) {
-        const char16_t* p;
-        rv = literal->GetValueConst(&p);
-        if (NS_FAILED(rv)) return rv;
-
-        aResult = p;
-        return NS_OK;
-    }
-
-    nsCOMPtr<nsIRDFDate> dateLiteral = do_QueryInterface(aNode);
-    if (dateLiteral) {
-        PRTime value;
-        rv = dateLiteral->GetValue(&value);
-        if (NS_FAILED(rv)) return rv;
-
-        nsAutoString str;
-        rv = DateTimeFormat::FormatPRTime(kDateFormatShort,
-                                          kTimeFormatSeconds,
-                                          value,
-                                          str);
-
-        aResult.Assign(str);
-
-        if (NS_FAILED(rv)) return rv;
-
-        return NS_OK;
-    }
-
-    nsCOMPtr<nsIRDFInt> intLiteral = do_QueryInterface(aNode);
-    if (intLiteral) {
-        int32_t	value;
-        rv = intLiteral->GetValue(&value);
-        if (NS_FAILED(rv)) return rv;
-
-        aResult.Truncate();
-        nsAutoString intStr;
-        intStr.AppendInt(value, 10);
-        aResult.Append(intStr);
-        return NS_OK;
-    }
-
-
-    nsCOMPtr<nsIRDFResource> resource = do_QueryInterface(aNode);
-    if (resource) {
-        const char* p;
-        rv = resource->GetValueConst(&p);
-        if (NS_FAILED(rv)) return rv;
-        CopyUTF8toUTF16(p, aResult);
-        return NS_OK;
-    }
-
-    NS_ERROR("not a resource or a literal");
-    return NS_ERROR_UNEXPECTED;
-}
-
-nsresult
-nsXULContentUtils::GetResource(int32_t aNameSpaceID, nsAtom* aAttribute, nsIRDFResource** aResult)
-{
-    // construct a fully-qualified URI from the namespace/tag pair.
-    NS_PRECONDITION(aAttribute != nullptr, "null ptr");
-    if (! aAttribute)
-        return NS_ERROR_NULL_POINTER;
-
-    return GetResource(aNameSpaceID, nsDependentAtomString(aAttribute),
-                       aResult);
-}
-
-
-nsresult
-nsXULContentUtils::GetResource(int32_t aNameSpaceID, const nsAString& aAttribute, nsIRDFResource** aResult)
-{
-    // construct a fully-qualified URI from the namespace/tag pair.
-
-    // XXX should we allow nodes with no namespace???
-    //NS_PRECONDITION(aNameSpaceID != kNameSpaceID_Unknown, "no namespace");
-    //if (aNameSpaceID == kNameSpaceID_Unknown)
-    //    return NS_ERROR_UNEXPECTED;
-
-    nsresult rv;
-
-    nsAutoStringN<256> uri;
-    if (aNameSpaceID != kNameSpaceID_Unknown && aNameSpaceID != kNameSpaceID_None) {
-        rv = nsContentUtils::NameSpaceManager()->GetNameSpaceURI(aNameSpaceID, uri);
-        // XXX ignore failure; treat as "no namespace"
-    }
-
-    // XXX check to see if we need to insert a '/' or a '#'. Oy.
-    if (!uri.IsEmpty()  && uri.Last() != '#' && uri.Last() != '/' && aAttribute.First() != '#')
-        uri.Append(char16_t('#'));
-
-    uri.Append(aAttribute);
-
-    rv = gRDF->GetUnicodeResource(uri, aResult);
-    NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get resource");
-    if (NS_FAILED(rv)) return rv;
-
-    return NS_OK;
-}
-
-
 nsresult
 nsXULContentUtils::SetCommandUpdater(nsIDocument* aDocument, Element* aElement)
 {
     // Deal with setting up a 'commandupdater'. Pulls the 'events' and
     // 'targets' attributes off of aElement, and adds it to the
     // document's command dispatcher.
     NS_PRECONDITION(aDocument != nullptr, "null ptr");
     if (! aDocument)
@@ -307,21 +151,8 @@ nsXULContentUtils::SetCommandUpdater(nsI
         return NS_ERROR_UNEXPECTED;
 
     rv = dispatcher->AddCommandUpdater(domelement, events, targets);
     if (NS_FAILED(rv)) return rv;
 
     return NS_OK;
 }
 
-void
-nsXULContentUtils::LogTemplateError(const char* aStr)
-{
-  nsAutoString message;
-  message.AssignLiteral("Error parsing template: ");
-  message.Append(NS_ConvertUTF8toUTF16(aStr).get());
-
-  nsCOMPtr<nsIConsoleService> cs = do_GetService(NS_CONSOLESERVICE_CONTRACTID);
-  if (cs) {
-    cs->LogStringMessage(message.get());
-    MOZ_LOG(gXULTemplateLog, LogLevel::Info, ("Error parsing template: %s", aStr));
-  }
-}
rename from dom/xul/templates/nsXULContentUtils.h
rename to dom/xul/nsXULContentUtils.h
--- a/dom/xul/templates/nsXULContentUtils.h
+++ b/dom/xul/nsXULContentUtils.h
@@ -10,88 +10,27 @@
  */
 
 #ifndef nsXULContentUtils_h__
 #define nsXULContentUtils_h__
 
 #include "nsISupports.h"
 
 class nsAtom;
+class nsICollation;
 class nsIContent;
 class nsIDocument;
-class nsIRDFNode;
-class nsIRDFResource;
-class nsIRDFLiteral;
 class nsIRDFService;
-class nsICollation;
 
 namespace mozilla {
 namespace dom {
 class Element;
 }
 }
 
-// errors to pass to LogTemplateError
-#define ERROR_TEMPLATE_INVALID_QUERYPROCESSOR                           \
-        "querytype attribute doesn't specify a valid query processor"
-#define ERROR_TEMPLATE_INVALID_QUERYSET                                 \
-        "unexpected <queryset> element"
-#define ERROR_TEMPLATE_NO_MEMBERVAR                                     \
-        "no member variable found. Action body should have an element with uri attribute"
-#define ERROR_TEMPLATE_WHERE_NO_SUBJECT                                 \
-        "<where> element is missing a subject attribute"
-#define ERROR_TEMPLATE_WHERE_NO_RELATION                                \
-        "<where> element is missing a rel attribute"
-#define ERROR_TEMPLATE_WHERE_NO_VALUE                                   \
-        "<where> element is missing a value attribute"
-#define ERROR_TEMPLATE_WHERE_NO_VAR                                     \
-        "<where> element must have at least one variable as a subject or value"
-#define ERROR_TEMPLATE_BINDING_BAD_SUBJECT                              \
-        "<binding> requires a variable for its subject attribute"
-#define ERROR_TEMPLATE_BINDING_BAD_PREDICATE                            \
-        "<binding> element is missing a predicate attribute"
-#define ERROR_TEMPLATE_BINDING_BAD_OBJECT                               \
-        "<binding> requires a variable for its object attribute"
-#define ERROR_TEMPLATE_CONTENT_NOT_FIRST                                \
-        "expected <content> to be first"
-#define ERROR_TEMPLATE_MEMBER_NOCONTAINERVAR                            \
-        "<member> requires a variable for its container attribute"
-#define ERROR_TEMPLATE_MEMBER_NOCHILDVAR                                \
-        "<member> requires a variable for its child attribute"
-#define ERROR_TEMPLATE_TRIPLE_NO_VAR                                    \
-        "<triple> should have at least one variable as a subject or object"
-#define ERROR_TEMPLATE_TRIPLE_BAD_SUBJECT                               \
-        "<triple> requires a variable for its subject attribute"
-#define ERROR_TEMPLATE_TRIPLE_BAD_PREDICATE                             \
-        "<triple> should have a non-variable value as a predicate"
-#define ERROR_TEMPLATE_TRIPLE_BAD_OBJECT                                \
-        "<triple> requires a variable for its object attribute"
-#define ERROR_TEMPLATE_MEMBER_UNBOUND                                   \
-        "neither container or child variables of <member> has a value"
-#define ERROR_TEMPLATE_TRIPLE_UNBOUND                                   \
-        "neither subject or object variables of <triple> has a value"
-#define ERROR_TEMPLATE_BAD_XPATH                                        \
-        "XPath expression in query could not be parsed"
-#define ERROR_TEMPLATE_BAD_ASSIGN_XPATH                                 \
-        "XPath expression in <assign> could not be parsed"
-#define ERROR_TEMPLATE_BAD_BINDING_XPATH                                \
-        "XPath expression in <binding> could not be parsed"
-#define ERROR_TEMPLATE_STORAGE_BAD_URI                                  \
-        "only profile: or file URI are allowed"
-#define ERROR_TEMPLATE_STORAGE_CANNOT_OPEN_DATABASE                     \
-        "cannot open given database"
-#define ERROR_TEMPLATE_STORAGE_BAD_QUERY                                \
-        "syntax error in the SQL query"
-#define ERROR_TEMPLATE_STORAGE_UNKNOWN_QUERY_PARAMETER                   \
-        "the given named parameter is unknown in the SQL query"
-#define ERROR_TEMPLATE_STORAGE_WRONG_TYPE_QUERY_PARAMETER               \
-        "the type of a query parameter is wrong"
-#define ERROR_TEMPLATE_STORAGE_QUERY_PARAMETER_NOT_BOUND                \
-        "a query parameter cannot be bound to the SQL query"
-
 class nsXULContentUtils
 {
 protected:
     static nsIRDFService* gRDF;
     static nsICollation *gCollation;
 
     static bool gDisableXULCache;
 
@@ -107,47 +46,21 @@ public:
 
     static nsresult
     FindChildByTag(nsIContent *aElement,
                    int32_t aNameSpaceID,
                    nsAtom* aTag,
                    mozilla::dom::Element** aResult);
 
     static nsresult
-    FindChildByResource(nsIContent* aElement,
-                        nsIRDFResource* aResource,
-                        nsIContent** aResult);
-
-    static nsresult
-    GetTextForNode(nsIRDFNode* aNode, nsAString& aResult);
-
-    static nsresult
-    GetResource(int32_t aNameSpaceID, nsAtom* aAttribute, nsIRDFResource** aResult);
-
-    static nsresult
-    GetResource(int32_t aNameSpaceID, const nsAString& aAttribute, nsIRDFResource** aResult);
-
-    static nsresult
     SetCommandUpdater(nsIDocument* aDocument, mozilla::dom::Element* aElement);
 
-    /**
-     * Log a message to the error console
-     */
-    static void
-    LogTemplateError(const char* aMsg);
-
     static nsIRDFService*
     RDFService()
     {
         return gRDF;
     }
 
     static nsICollation*
     GetCollation();
-
-#define XUL_RESOURCE(ident, uri) static nsIRDFResource* ident
-#define XUL_LITERAL(ident, val)  static nsIRDFLiteral*  ident
-#include "nsXULResourceList.h"
-#undef XUL_RESOURCE
-#undef XUL_LITERAL
 };
 
 #endif // nsXULContentUtils_h__
--- a/dom/xul/nsXULElement.cpp
+++ b/dom/xul/nsXULElement.cpp
@@ -28,33 +28,28 @@
 #include "mozilla/DeclarationBlockInlines.h"
 #include "nsFocusManager.h"
 #include "nsHTMLStyleSheet.h"
 #include "nsNameSpaceManager.h"
 #include "nsIObjectInputStream.h"
 #include "nsIObjectOutputStream.h"
 #include "nsIPresShell.h"
 #include "nsIPrincipal.h"
-#include "nsIRDFCompositeDataSource.h"
-#include "nsIRDFNode.h"
-#include "nsIRDFService.h"
 #include "nsIScriptContext.h"
 #include "nsIScriptError.h"
 #include "nsIScriptSecurityManager.h"
 #include "nsIServiceManager.h"
 #include "mozilla/css/StyleRule.h"
 #include "nsIURL.h"
 #include "nsViewManager.h"
 #include "nsIWidget.h"
 #include "nsIXULDocument.h"
-#include "nsIXULTemplateBuilder.h"
 #include "nsLayoutCID.h"
 #include "nsContentCID.h"
 #include "mozilla/dom/Event.h"
-#include "nsRDFCID.h"
 #include "nsStyleConsts.h"
 #include "nsString.h"
 #include "nsXULControllers.h"
 #include "nsIBoxObject.h"
 #include "nsPIBoxObject.h"
 #include "XULDocument.h"
 #include "nsXULPopupListener.h"
 #include "nsRuleWalker.h"
@@ -65,21 +60,19 @@
 #include "nsContentList.h"
 #include "mozilla/InternalMutationEvent.h"
 #include "mozilla/MouseEvents.h"
 #include "nsIDOMMutationEvent.h"
 #include "nsPIDOMWindow.h"
 #include "nsJSPrincipals.h"
 #include "nsDOMAttributeMap.h"
 #include "nsGkAtoms.h"
-#include "nsXULContentUtils.h"
 #include "nsNodeUtils.h"
 #include "nsFrameLoader.h"
 #include "mozilla/Logging.h"
-#include "rdf.h"
 #include "nsIControllers.h"
 #include "nsAttrValueOrString.h"
 #include "nsAttrValueInlines.h"
 #include "mozilla/Attributes.h"
 #include "nsIController.h"
 #include "nsQueryObject.h"
 #include <algorithm>
 #include "nsIDOMChromeWindow.h"
@@ -327,21 +320,16 @@ nsXULElement::Clone(mozilla::dom::NodeIn
 
     RefPtr<mozilla::dom::NodeInfo> ni = aNodeInfo;
     RefPtr<nsXULElement> element = new nsXULElement(ni.forget());
 
     nsresult rv = element->mAttrsAndChildren.EnsureCapacityToClone(mAttrsAndChildren,
                                                                    aPreallocateChildren);
     NS_ENSURE_SUCCESS(rv, rv);
 
-    // XXX TODO: set up RDF generic builder n' stuff if there is a
-    // 'datasources' attribute? This is really kind of tricky,
-    // because then we'd need to -selectively- copy children that
-    // -weren't- generated from RDF. Ugh. Forget it.
-
     // Note that we're _not_ copying mControllers.
 
     uint32_t count = mAttrsAndChildren.AttrCount();
     rv = NS_OK;
     for (uint32_t i = 0; i < count; ++i) {
         const nsAttrName* originalName = mAttrsAndChildren.AttrNameAt(i);
         const nsAttrValue* originalValue = mAttrsAndChildren.AttrAt(i);
         nsAttrValue attrValue;
@@ -1331,64 +1319,16 @@ nsXULElement::PreHandleEvent(EventChainV
         nsAutoString command;
         GetAttr(kNameSpaceID_None, nsGkAtoms::command, command);
         MOZ_ASSERT(!command.IsEmpty());
         return DispatchXULCommand(aVisitor, command);
     }
     return nsStyledElement::PreHandleEvent(aVisitor);
 }
 
-// XXX This _should_ be an implementation method, _not_ publicly exposed :-(
-already_AddRefed<nsIRDFResource>
-nsXULElement::GetResource(ErrorResult& rv)
-{
-    nsAutoString id;
-    GetAttr(kNameSpaceID_None, nsGkAtoms::ref, id);
-    if (id.IsEmpty()) {
-        GetAttr(kNameSpaceID_None, nsGkAtoms::id, id);
-    }
-
-    if (id.IsEmpty()) {
-        return nullptr;
-    }
-
-    nsCOMPtr<nsIRDFResource> resource;
-    rv = nsXULContentUtils::RDFService()->
-        GetUnicodeResource(id, getter_AddRefs(resource));
-    return resource.forget();
-}
-
-already_AddRefed<nsIRDFCompositeDataSource>
-nsXULElement::GetDatabase()
-{
-    nsCOMPtr<nsIXULTemplateBuilder> builder = GetBuilder();
-    if (!builder) {
-        return nullptr;
-    }
-
-    nsCOMPtr<nsIRDFCompositeDataSource> database;
-    builder->GetDatabase(getter_AddRefs(database));
-    return database.forget();
-}
-
-
-already_AddRefed<nsIXULTemplateBuilder>
-nsXULElement::GetBuilder()
-{
-    // XXX sXBL/XBL2 issue! Owner or current document?
-    nsCOMPtr<nsIXULDocument> xuldoc = do_QueryInterface(GetUncomposedDoc());
-    if (!xuldoc) {
-        return nullptr;
-    }
-
-    nsCOMPtr<nsIXULTemplateBuilder> builder;
-    xuldoc->GetTemplateBuilderFor(this, getter_AddRefs(builder));
-    return builder.forget();
-}
-
 //----------------------------------------------------------------------
 // Implementation methods
 
 NS_IMETHODIMP
 nsXULElement::WalkContentStyleRules(nsRuleWalker* aRuleWalker)
 {
     return NS_OK;
 }
--- a/dom/xul/nsXULElement.h
+++ b/dom/xul/nsXULElement.h
@@ -17,20 +17,17 @@
 #include "nsIDOMEvent.h"
 #include "nsIServiceManager.h"
 #include "nsAtom.h"
 #include "mozilla/dom/NodeInfo.h"
 #include "nsIControllers.h"
 #include "nsIDOMElement.h"
 #include "nsIDOMXULElement.h"
 #include "nsIDOMXULMultSelectCntrlEl.h"
-#include "nsIRDFCompositeDataSource.h"
-#include "nsIRDFResource.h"
 #include "nsIURI.h"
-#include "nsIXULTemplateBuilder.h"
 #include "nsLayoutCID.h"
 #include "nsAttrAndChildArray.h"
 #include "nsGkAtoms.h"
 #include "nsStringFwd.h"
 #include "nsStyledElement.h"
 #include "nsIFrameLoader.h"
 #include "nsFrameLoader.h" // Needed because we return an
                            // already_AddRefed<nsFrameLoader> where bindings
@@ -328,22 +325,21 @@ public:
   The XUL element.
 
  */
 
 #define XUL_ELEMENT_FLAG_BIT(n_) NODE_FLAG_BIT(ELEMENT_TYPE_SPECIFIC_BITS_OFFSET + (n_))
 
 // XUL element specific bits
 enum {
-  XUL_ELEMENT_TEMPLATE_GENERATED =        XUL_ELEMENT_FLAG_BIT(0),
-  XUL_ELEMENT_HAS_CONTENTMENU_LISTENER =  XUL_ELEMENT_FLAG_BIT(1),
-  XUL_ELEMENT_HAS_POPUP_LISTENER =        XUL_ELEMENT_FLAG_BIT(2)
+  XUL_ELEMENT_HAS_CONTENTMENU_LISTENER =  XUL_ELEMENT_FLAG_BIT(0),
+  XUL_ELEMENT_HAS_POPUP_LISTENER =        XUL_ELEMENT_FLAG_BIT(1)
 };
 
-ASSERT_NODE_FLAGS_SPACE(ELEMENT_TYPE_SPECIFIC_BITS_OFFSET + 3);
+ASSERT_NODE_FLAGS_SPACE(ELEMENT_TYPE_SPECIFIC_BITS_OFFSET + 2);
 
 #undef XUL_ELEMENT_FLAG_BIT
 
 class nsXULElement final : public nsStyledElement,
                            public nsIDOMXULElement
 {
 public:
     using Element::Blur;
@@ -392,25 +388,16 @@ public:
     virtual bool IsNodeOfType(uint32_t aFlags) const override;
     virtual bool IsFocusableInternal(int32_t* aTabIndex, bool aWithMouse) override;
 
     NS_IMETHOD WalkContentStyleRules(nsRuleWalker* aRuleWalker) override;
     virtual nsChangeHint GetAttributeChangeHint(const nsAtom* aAttribute,
                                                 int32_t aModType) const override;
     NS_IMETHOD_(bool) IsAttributeMapped(const nsAtom* aAttribute) const override;
 
-    // XUL element methods
-    /**
-     * The template-generated flag is used to indicate that a
-     * template-generated element has already had its children generated.
-     */
-    void SetTemplateGenerated() { SetFlags(XUL_ELEMENT_TEMPLATE_GENERATED); }
-    void ClearTemplateGenerated() { UnsetFlags(XUL_ELEMENT_TEMPLATE_GENERATED); }
-    bool GetTemplateGenerated() { return HasFlag(XUL_ELEMENT_TEMPLATE_GENERATED); }
-
     // nsIDOMNode
     NS_FORWARD_NSIDOMNODE_TO_NSINODE
     // And since that shadowed GetParentElement with the XPCOM
     // signature, pull in the one we care about.
     using nsStyledElement::GetParentElement;
 
     // nsIDOMElement
     NS_FORWARD_NSIDOMELEMENT_TO_GENERIC
@@ -631,24 +618,16 @@ public:
     void GetTop(DOMString& aValue) const
     {
         GetXULAttr(nsGkAtoms::top, aValue);
     }
     void SetTop(const nsAString& aValue, mozilla::ErrorResult& rv)
     {
         SetXULAttr(nsGkAtoms::top, aValue, rv);
     }
-    void GetDatasources(DOMString& aValue) const
-    {
-        GetXULAttr(nsGkAtoms::datasources, aValue);
-    }
-    void SetDatasources(const nsAString& aValue, mozilla::ErrorResult& rv)
-    {
-        SetXULAttr(nsGkAtoms::datasources, aValue, rv);
-    }
     void GetRef(DOMString& aValue) const
     {
         GetXULAttr(nsGkAtoms::ref, aValue);
     }
     void SetRef(const nsAString& aValue, mozilla::ErrorResult& rv)
     {
         SetXULAttr(nsGkAtoms::ref, aValue, rv);
     }
@@ -679,19 +658,16 @@ public:
     bool AllowEvents() const
     {
         return BoolAttrIsTrue(nsGkAtoms::allowevents);
     }
     void SetAllowEvents(bool aAllowEvents)
     {
         SetXULBoolAttr(nsGkAtoms::allowevents, aAllowEvents);
     }
-    already_AddRefed<nsIRDFCompositeDataSource> GetDatabase();
-    already_AddRefed<nsIXULTemplateBuilder> GetBuilder();
-    already_AddRefed<nsIRDFResource> GetResource(mozilla::ErrorResult& rv);
     nsIControllers* GetControllers(mozilla::ErrorResult& rv);
     // Note: this can only fail if the do_CreateInstance for the boxobject
     // contact fails for some reason.
     already_AddRefed<mozilla::dom::BoxObject> GetBoxObject(mozilla::ErrorResult& rv);
     void Click(mozilla::dom::CallerType aCallerType);
     void DoCommand();
     already_AddRefed<nsINodeList>
       GetElementsByAttribute(const nsAString& aAttribute,
rename from dom/xul/templates/nsXULSortService.cpp
rename to dom/xul/nsXULSortService.cpp
--- a/dom/xul/templates/nsXULSortService.cpp
+++ b/dom/xul/nsXULSortService.cpp
@@ -15,18 +15,16 @@
 #include "nsGkAtoms.h"
 #include "nsNameSpaceManager.h"
 #include "nsXULContentUtils.h"
 #include "nsString.h"
 #include "nsQuickSort.h"
 #include "nsWhitespaceTokenizer.h"
 #include "nsXULSortService.h"
 #include "nsXULElement.h"
-#include "nsIXULTemplateBuilder.h"
-#include "nsTemplateMatch.h"
 #include "nsICollation.h"
 #include "nsUnicharUtils.h"
 
 NS_IMPL_ISUPPORTS(XULSortServiceImpl, nsIXULSortService)
 
 void
 XULSortServiceImpl::SetSortHints(Element* aElement, nsSortState* aSortState)
 {
@@ -88,33 +86,18 @@ XULSortServiceImpl::SetSortColumnHints(n
   }
 }
 
 nsresult
 XULSortServiceImpl::GetItemsToSort(nsIContent *aContainer,
                                    nsSortState* aSortState,
                                    nsTArray<contentSortInfo>& aSortItems)
 {
-  // if there is a template attached to the sort node, use the builder to get
-  // the items to be sorted
-  RefPtr<nsXULElement> element = nsXULElement::FromContent(aContainer);
-  if (element) {
-    nsCOMPtr<nsIXULTemplateBuilder> builder = element->GetBuilder();
-
-    if (builder) {
-      nsresult rv = builder->GetQueryProcessor(getter_AddRefs(aSortState->processor));
-      if (NS_FAILED(rv) || !aSortState->processor)
-        return rv;
-
-      return GetTemplateItemsToSort(aContainer, builder, aSortState, aSortItems);
-    }
-  }
-
-  // if there is no template builder, just get the children. For trees,
-  // get the treechildren element as use that as the parent
+  // Get the children. For trees, get the treechildren element and
+  // use that as the parent
   RefPtr<Element> treechildren;
   if (aContainer->NodeInfo()->Equals(nsGkAtoms::tree, kNameSpaceID_XUL)) {
     nsXULContentUtils::FindChildByTag(aContainer,
                                       kNameSpaceID_XUL,
                                       nsGkAtoms::treechildren,
                                       getter_AddRefs(treechildren));
     if (!treechildren)
       return NS_OK;
@@ -131,90 +114,41 @@ XULSortServiceImpl::GetItemsToSort(nsICo
 
     cinfo->content = child;
   }
 
   return NS_OK;
 }
 
 
-nsresult
-XULSortServiceImpl::GetTemplateItemsToSort(nsIContent* aContainer,
-                                           nsIXULTemplateBuilder* aBuilder,
-                                           nsSortState* aSortState,
-                                           nsTArray<contentSortInfo>& aSortItems)
-{
-  for (nsIContent* child = aContainer->GetFirstChild();
-       child;
-       child = child->GetNextSibling()) {
-
-    nsCOMPtr<nsIDOMElement> childnode = do_QueryInterface(child);
-
-    nsCOMPtr<nsIXULTemplateResult> result;
-    nsresult rv = aBuilder->GetResultForContent(childnode, getter_AddRefs(result));
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    if (result) {
-      contentSortInfo* cinfo = aSortItems.AppendElement();
-      if (!cinfo)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-      cinfo->content = child;
-      cinfo->result = result;
-    }
-    else if (!aContainer->IsXULElement(nsGkAtoms::_template)) {
-      rv = GetTemplateItemsToSort(child, aBuilder, aSortState, aSortItems);
-      NS_ENSURE_SUCCESS(rv, rv);
-    }
-  }
-
-  return NS_OK;
-}
-
 int
 testSortCallback(const void *data1, const void *data2, void *privateData)
 {
   /// Note: testSortCallback is a small C callback stub for NS_QuickSort
   contentSortInfo *left = (contentSortInfo *)data1;
   contentSortInfo *right = (contentSortInfo *)data2;
   nsSortState* sortState = (nsSortState *)privateData;
 
   int32_t sortOrder = 0;
 
-  if (sortState->direction == nsSortState_natural && sortState->processor) {
-    // sort in natural order
-    sortState->processor->CompareResults(left->result, right->result,
-                                         nullptr, sortState->sortHints, &sortOrder);
-  }
-  else {
-    int32_t length = sortState->sortKeys.Length();
-    for (int32_t t = 0; t < length; t++) {
-      // for templates, use the query processor to do sorting
-      if (sortState->processor) {
-        sortState->processor->CompareResults(left->result, right->result,
-                                             sortState->sortKeys[t],
-                                             sortState->sortHints, &sortOrder);
-        if (sortOrder)
-          break;
-      } else {
-        // no template, so just compare attributes. Ignore namespaces for now.
-        nsAutoString leftstr, rightstr;
-        if (left->content->IsElement()) {
-          left->content->AsElement()->GetAttr(kNameSpaceID_None,
-                                              sortState->sortKeys[t],
-                                              leftstr);
-        }
-        if (right->content->IsElement()) {
-          right->content->AsElement()->GetAttr(kNameSpaceID_None,
-                                               sortState->sortKeys[t], rightstr);
-        }
+  int32_t length = sortState->sortKeys.Length();
+  for (int32_t t = 0; t < length; t++) {
+    // compare attributes. Ignore namespaces for now.
+    nsAutoString leftstr, rightstr;
+    if (left->content->IsElement()) {
+      left->content->AsElement()->GetAttr(kNameSpaceID_None,
+                                          sortState->sortKeys[t],
+                                          leftstr);
+    }
+    if (right->content->IsElement()) {
+      right->content->AsElement()->GetAttr(kNameSpaceID_None,
+                                           sortState->sortKeys[t], rightstr);
+    }
 
-        sortOrder = XULSortServiceImpl::CompareValues(leftstr, rightstr, sortState->sortHints);
-      }
-    }
+    sortOrder = XULSortServiceImpl::CompareValues(leftstr, rightstr, sortState->sortHints);
   }
 
   if (sortState->direction == nsSortState_descending)
     sortOrder = -sortOrder;
 
   return sortOrder;
 }
 
@@ -484,17 +418,16 @@ XULSortServiceImpl::Sort(nsIDOMNode* aNo
   nsresult rv = InitializeSortState(sortNode, sortNode,
                                     aSortKey, aSortHints, &sortState);
   NS_ENSURE_SUCCESS(rv, rv);
 
   // store sort info in attributes on content
   SetSortHints(sortNode, &sortState);
   rv = SortContainer(sortNode, &sortState);
 
-  sortState.processor = nullptr; // don't hang on to this reference
   return rv;
 }
 
 nsresult
 NS_NewXULSortService(nsIXULSortService** sortService)
 {
   *sortService = new XULSortServiceImpl();
   NS_ADDREF(*sortService);
rename from dom/xul/templates/nsXULSortService.h
rename to dom/xul/nsXULSortService.h
--- a/dom/xul/templates/nsXULSortService.h
+++ b/dom/xul/nsXULSortService.h
@@ -1,77 +1,69 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /*
-  This sort service is used to sort template built content or content by attribute.
+  This sort service is used to sort content by attribute.
  */
 
-#ifndef nsXULTemplateResultSetRDF_h
-#define nsXULTemplateResultSetRDF_h
+#ifndef nsXULSortService_h
+#define nsXULSortService_h
 
 #include "nsCOMPtr.h"
 #include "nsCOMArray.h"
 #include "nsTArray.h"
 #include "nsIContent.h"
-#include "nsIXULTemplateResult.h"
-#include "nsIXULTemplateQueryProcessor.h"
 #include "nsIXULSortService.h"
 #include "nsCycleCollectionParticipant.h"
 
 enum nsSortState_direction {
   nsSortState_descending,
   nsSortState_ascending,
   nsSortState_natural
 };
 
 // the sort state holds info about the current sort
 struct nsSortState
 {
   bool initialized;
   MOZ_INIT_OUTSIDE_CTOR bool invertSort;
   MOZ_INIT_OUTSIDE_CTOR bool inbetweenSeparatorSort;
   MOZ_INIT_OUTSIDE_CTOR bool sortStaticsLast;
-  MOZ_INIT_OUTSIDE_CTOR bool isContainerRDFSeq;
 
   uint32_t sortHints;
 
   MOZ_INIT_OUTSIDE_CTOR nsSortState_direction direction;
   nsAutoString sort;
   nsTArray<RefPtr<nsAtom>> sortKeys;
 
-  nsCOMPtr<nsIXULTemplateQueryProcessor> processor;
   nsCOMPtr<nsIContent> lastContainer;
   MOZ_INIT_OUTSIDE_CTOR bool lastWasFirst, lastWasLast;
 
   nsSortState()
     : initialized(false),
-      isContainerRDFSeq(false),
       sortHints(0)
   {
   }
   void Traverse(nsCycleCollectionTraversalCallback &cb) const
   {
-    cb.NoteXPCOMChild(processor);
     cb.NoteXPCOMChild(lastContainer);
   }
 };
 
 // information about a particular item to be sorted
 struct contentSortInfo {
   nsCOMPtr<nsIContent> content;
   nsCOMPtr<nsIContent> parent;
-  nsCOMPtr<nsIXULTemplateResult> result;
   void swap(contentSortInfo& other)
   {
     content.swap(other.content);
     parent.swap(other.parent);
-    result.swap(other.result);
   }
 };
 
 ////////////////////////////////////////////////////////////////////////
 // ServiceImpl
 //
 //   This is the sort service.
 //
@@ -118,25 +110,16 @@ public:
    *   - otherwise, get the direct children
    */
   nsresult
   GetItemsToSort(nsIContent *aContainer,
                  nsSortState* aSortState,
                  nsTArray<contentSortInfo>& aSortItems);
 
   /**
-   * Get the list of items to sort for template built content
-   */
-  nsresult
-  GetTemplateItemsToSort(nsIContent* aContainer,
-                         nsIXULTemplateBuilder* aBuilder,
-                         nsSortState* aSortState,
-                         nsTArray<contentSortInfo>& aSortItems);
-
-  /**
    * Sort a container using the supplied sort state details.
    */
   nsresult
   SortContainer(nsIContent *aContainer, nsSortState* aSortState);
 
   /**
    * Given a list of sortable items, reverse the list. This is done
    * when simply changing the sort direction for the same key.
@@ -166,9 +149,9 @@ public:
    * Compares aLeft and aRight and returns < 0, 0, or > 0. The sort
    * hints are checked for case matching and integer sorting.
    */
   static int32_t CompareValues(const nsAString& aLeft,
                                const nsAString& aRight,
                                uint32_t aSortHints);
 };
 
-#endif
+#endif // nsXULSortService_h
deleted file mode 100644
--- a/dom/xul/templates/crashtests/257752-1-recursion.rdf
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:m="urn:foo#">
-   <rdf:Seq about="urn:x-rec:1">
-     <rdf:li rdf:resource="urn:x-rec:2"/>
-   </rdf:Seq>
-   <rdf:Seq about="urn:x-rec:2">
-     <rdf:li rdf:resource="urn:x-rec:3"/>
-   </rdf:Seq>
-   <rdf:Seq about="urn:x-rec:3">
-     <rdf:li rdf:resource="urn:x-rec:1"/>
-   </rdf:Seq>
-</rdf:RDF>
deleted file mode 100644
--- a/dom/xul/templates/crashtests/257752-1-recursion.xul
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-
-<window id="child-iterate-recurse"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<vbox flex="1" style="overflow: auto;">
-
-<vbox datasources="257752-1-recursion.rdf" ref="urn:x-rec:1">
-  <template>
-    <rule>
-      <conditions>
-          <content uri="?uri"/>
-          <member container="?uri" child="?child"/>
-      </conditions>
-      <action>
-        <vbox uri="?child" style="border: 1px solid grey; margin: 1em;">
-          <label value="hi"/>
-        </vbox>
-      </action>
-    </rule>
-  </template>
-</vbox>
-
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/crashtests/329884-1.xul
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-        
-<script>
-
-function rM(q1) { q1.parentNode.removeChild(q1); }
-
-function init2()
-{ 
-  rM(document.getElementById("t"));
-}
-
-window.addEventListener("load", init2, false);
-
-</script>
-
-<foo id="t" datasources="1.rdf" />
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/crashtests/330012-1.rdf
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:s="urn:squarefree:a1:">
-  <rdf:Description about="urn:root">
-    <s:grapes>
-      <rdf:Bag>
-        <rdf:li>
-          <rdf:Description/>
-        </rdf:li>
-      </rdf:Bag>
-    </s:grapes>
- </rdf:Description>
-</rdf:RDF>
deleted file mode 100644
--- a/dom/xul/templates/crashtests/330012-1.xul
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <foo id="foo" datasources="330012-1.rdf" ref="urn:root">
-    <template>
-      <rule>
-        <conditions>
-          <content uri="?root"/>
-          <triple subject="?root"
-                  predicate="urn:squarefree:a1:grapes"
-                  object="?lalala"/>
-          <member container="?grapes" child="?grape"/>
-        </conditions>
-        <action>
-          <bar uri="?grape"/>
-       </action>
-     </rule>
-   </template>
- </foo>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/crashtests/404346-1.xul
+++ /dev/null
@@ -1,7 +0,0 @@
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-<box id="b">
-<box id="a" template="b"/>
-<triple/>
-</box>
-<box datasources="" observes="a" ref="bbb"/>
-</window>
\ No newline at end of file
deleted file mode 100644
--- a/dom/xul/templates/crashtests/415019-1.xul
+++ /dev/null
@@ -1,14 +0,0 @@
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <hbox datasources="nosuch.rdf" ref="urn:root">
-    <template>
-      <rule>
-        <conditions>
-          <triple subject="?a"/>
-        </conditions>
-        <action>
-          <vbox uri="?b"/>
-        </action>
-      </rule>
-    </template>
-  </hbox>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/crashtests/417840-1.xul
+++ /dev/null
@@ -1,1 +0,0 @@
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="document.getElementById('foo').removeAttribute('ref');"><foo id="foo" datasources="nosuch.rdf" ref="urn:root"><template/></foo></window>
deleted file mode 100644
--- a/dom/xul/templates/crashtests/424418-1.xul
+++ /dev/null
@@ -1,1 +0,0 @@
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"><hbox datasources="u"/></window>
deleted file mode 100644
--- a/dom/xul/templates/crashtests/crashtests.list
+++ /dev/null
@@ -1,7 +0,0 @@
-load 257752-1-recursion.xul
-load 329884-1.xul
-skip-if(winWidget) load 330012-1.xul # bug 742455
-load 404346-1.xul
-load 415019-1.xul
-load 417840-1.xul
-load 424418-1.xul
deleted file mode 100644
--- a/dom/xul/templates/moz.build
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-MOCHITEST_CHROME_MANIFESTS += ['tests/chrome/chrome.ini']
-
-XPIDL_SOURCES += [
-    'nsIXULBuilderListener.idl',
-    'nsIXULSortService.idl',
-    'nsIXULTemplateBuilder.idl',
-    'nsIXULTemplateQueryProcessor.idl',
-    'nsIXULTemplateResult.idl',
-    'nsIXULTemplateRuleFilter.idl',
-]
-
-XPIDL_MODULE = 'xultmpl'
-
-EXPORTS += [
-    'nsTreeRows.h',
-    'nsXULTemplateBuilder.h',
-    'nsXULTreeBuilder.h',
-]
-
-UNIFIED_SOURCES += [
-    'nsContentSupportMap.cpp',
-    'nsContentTestNode.cpp',
-    'nsInstantiationNode.cpp',
-    'nsRDFBinding.cpp',
-    'nsRDFConInstanceTestNode.cpp',
-    'nsRDFConMemberTestNode.cpp',
-    'nsRDFPropertyTestNode.cpp',
-    'nsRDFQuery.cpp',
-    'nsResourceSet.cpp',
-    'nsRuleNetwork.cpp',
-    'nsTemplateMatch.cpp',
-    'nsTemplateRule.cpp',
-    'nsTreeRows.cpp',
-    'nsXMLBinding.cpp',
-    'nsXULContentBuilder.cpp',
-    'nsXULContentUtils.cpp',
-    'nsXULSortService.cpp',
-    'nsXULTemplateBuilder.cpp',
-    'nsXULTemplateQueryProcessorRDF.cpp',
-    'nsXULTemplateQueryProcessorStorage.cpp',
-    'nsXULTemplateQueryProcessorXML.cpp',
-    'nsXULTemplateResultRDF.cpp',
-    'nsXULTemplateResultSetRDF.cpp',
-    'nsXULTemplateResultStorage.cpp',
-    'nsXULTemplateResultXML.cpp',
-    'nsXULTreeBuilder.cpp',
-]
-
-LOCAL_INCLUDES += [
-    '/dom/base',
-    '/dom/xul',
-    '/layout/xul/tree/',
-]
-
-FINAL_LIBRARY = 'xul'
-
-if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
-    CXXFLAGS += ['-Wno-error=shadow']
deleted file mode 100644
--- a/dom/xul/templates/nsContentSupportMap.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsContentSupportMap.h"
-#include "nsXULElement.h"
-
-void
-nsContentSupportMap::Remove(nsIContent* aElement)
-{
-    nsIContent* child = aElement;
-    do {
-        mMap.Remove(child);
-        child = child->GetNextNode(aElement);
-    } while(child);
-}
-
deleted file mode 100644
--- a/dom/xul/templates/nsContentSupportMap.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsContentSupportMap_h__
-#define nsContentSupportMap_h__
-
-#include "PLDHashTable.h"
-#include "nsTemplateMatch.h"
-
-/**
- * The nsContentSupportMap maintains a mapping from a "resource element"
- * in the content tree to the nsTemplateMatch that was used to instantiate it. This
- * is necessary to allow the XUL content to be built lazily. Specifically,
- * when building "resumes" on a partially-built content element, the builder
- * will walk upwards in the content tree to find the first element with an
- * 'id' attribute. This element is assumed to be the "resource element",
- * and allows the content builder to access the nsTemplateMatch (variable assignments
- * and rule information).
- */
-class nsContentSupportMap {
-public:
-    nsContentSupportMap() : mMap(PLDHashTable::StubOps(), sizeof(Entry)) { }
-    ~nsContentSupportMap() { }
-
-    nsresult Put(nsIContent* aElement, nsTemplateMatch* aMatch) {
-        PLDHashEntryHdr* hdr = mMap.Add(aElement, mozilla::fallible);
-        if (!hdr)
-            return NS_ERROR_OUT_OF_MEMORY;
-
-        Entry* entry = static_cast<Entry*>(hdr);
-        NS_ASSERTION(entry->mMatch == nullptr, "over-writing entry");
-        entry->mContent = aElement;
-        entry->mMatch   = aMatch;
-        return NS_OK;
-    }
-
-    bool Get(nsIContent* aElement, nsTemplateMatch** aMatch) {
-        PLDHashEntryHdr* hdr = mMap.Search(aElement);
-        if (!hdr)
-            return false;
-
-        Entry* entry = static_cast<Entry*>(hdr);
-        *aMatch = entry->mMatch;
-        return true;
-    }
-
-    void Remove(nsIContent* aElement);
-
-    void Clear() { mMap.Clear(); }
-
-protected:
-    PLDHashTable mMap;
-
-    struct Entry : public PLDHashEntryHdr {
-        nsIContent*      mContent;
-        nsTemplateMatch* mMatch;
-    };
-};
-
-#endif
deleted file mode 100644
--- a/dom/xul/templates/nsContentTestNode.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsContentTestNode.h"
-#include "nsIRDFResource.h"
-#include "nsAtom.h"
-#include "nsIDOMElement.h"
-#include "nsXULContentUtils.h"
-#include "nsIXULTemplateResult.h"
-#include "nsIXULTemplateBuilder.h"
-#include "nsXULTemplateQueryProcessorRDF.h"
-
-#include "mozilla/Logging.h"
-
-using mozilla::LogLevel;
-
-extern mozilla::LazyLogModule gXULTemplateLog;
-
-nsContentTestNode::nsContentTestNode(nsXULTemplateQueryProcessorRDF* aProcessor,
-                                     nsAtom* aRefVariable)
-    : TestNode(nullptr),
-      mProcessor(aProcessor),
-      mDocument(nullptr),
-      mRefVariable(aRefVariable),
-      mTag(nullptr)
-{
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        nsAutoString tag(NS_LITERAL_STRING("(none)"));
-        if (mTag)
-            mTag->ToString(tag);
-
-        nsAutoString refvar(NS_LITERAL_STRING("(none)"));
-        if (aRefVariable)
-            aRefVariable->ToString(refvar);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsContentTestNode[%p]: ref-var=%s tag=%s",
-                this, NS_ConvertUTF16toUTF8(refvar).get(),
-                NS_ConvertUTF16toUTF8(tag).get()));
-    }
-}
-
-nsresult
-nsContentTestNode::FilterInstantiations(InstantiationSet& aInstantiations,
-                                        bool* aCantHandleYet) const
-
-{
-    if (aCantHandleYet)
-        *aCantHandleYet = false;
-    return NS_OK;
-}
-
-nsresult
-nsContentTestNode::Constrain(InstantiationSet& aInstantiations)
-{
-    // contrain the matches to those that have matched in the template builder
-
-    nsIXULTemplateBuilder* builder = mProcessor->GetBuilder();
-    if (!builder) {
-        aInstantiations.Clear();
-        return NS_OK;
-    }
-
-    nsresult rv;
-
-    InstantiationSet::Iterator last = aInstantiations.Last();
-    for (InstantiationSet::Iterator inst = aInstantiations.First(); inst != last; ++inst) {
-
-        nsCOMPtr<nsIRDFNode> refValue;
-        bool hasRefBinding = inst->mAssignments.GetAssignmentFor(mRefVariable,
-                                                                   getter_AddRefs(refValue));
-        if (hasRefBinding) {
-            nsCOMPtr<nsIRDFResource> refResource = do_QueryInterface(refValue);
-            if (refResource) {
-                bool generated;
-                rv = builder->HasGeneratedContent(refResource, mTag, &generated);
-                if (NS_FAILED(rv)) return rv;
-
-                if (generated)
-                    continue;
-            }
-        }
-
-        aInstantiations.Erase(inst--);
-    }
-
-    return NS_OK;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsContentTestNode.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsContentTestNode_h__
-#define nsContentTestNode_h__
-
-#include "mozilla/Attributes.h"
-#include "nscore.h"
-#include "nsRuleNetwork.h"
-#include "nsAtom.h"
-#include "nsIDOMDocument.h"
-
-class nsXULTemplateQueryProcessorRDF;
-
-/**
- * The nsContentTestNode is always the top node in a query's rule network. It
- * exists so that Constrain can filter out resources that aren't part of a
- * result.
- */
-class nsContentTestNode : public TestNode
-{
-public:
-    nsContentTestNode(nsXULTemplateQueryProcessorRDF* aProcessor,
-                      nsAtom* aContentVariable);
-
-    virtual nsresult FilterInstantiations(InstantiationSet& aInstantiations,
-                                          bool* aCantHandleYet) const override;
-
-    nsresult
-    Constrain(InstantiationSet& aInstantiations) override;
-
-    void SetTag(nsAtom* aTag, nsIDOMDocument* aDocument)
-    {
-        mTag = aTag;
-        mDocument = aDocument;
-    }
-
-protected:
-    nsXULTemplateQueryProcessorRDF *mProcessor;
-    nsIDOMDocument* mDocument;
-    RefPtr<nsAtom> mRefVariable;
-    RefPtr<nsAtom> mTag;
-};
-
-#endif // nsContentTestNode_h__
-
deleted file mode 100644
--- a/dom/xul/templates/nsIXULBuilderListener.idl
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*- Mode: idl; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-
-#include "nsISupports.idl"
-
-interface nsIXULTemplateBuilder;
-
-// An nsIXULBuilderListener object is a listener that will be notified
-// when a template builder rebuilds its content.
-[scriptable, uuid(ac46be8f-c863-4c23-84a2-d0fcc8dfa9f4)]
-interface nsIXULBuilderListener: nsISupports {
-
-  /**
-   * Called before a template builder rebuilds its content.
-   * @param aBuilder the template builder that rebuilds the content.
-   */
-  void willRebuild(in nsIXULTemplateBuilder aBuilder);
-
-  /**
-   * Called after a template builder has rebuilt its content.
-   * @param aBuilder the template builder that has rebuilt the content.
-   */
-  void didRebuild(in nsIXULTemplateBuilder aBuilder);
-
-};
deleted file mode 100644
--- a/dom/xul/templates/nsIXULTemplateBuilder.idl
+++ /dev/null
@@ -1,407 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "domstubs.idl"
-
-interface nsIContent;
-interface nsIXULBuilderListener;
-interface nsIXULTemplateResult;
-interface nsIXULTemplateRuleFilter;
-interface nsIXULTemplateQueryProcessor;
-interface nsIRDFResource;
-interface nsIRDFCompositeDataSource;
-interface nsIDOMDataTransfer;
-
-%{C++
-class nsAtom;
-%}
-[ptr] native nsAtomPtr(nsAtom);
-[ptr] native Element (mozilla::dom::Element);
-
-/**
- * A template builder, given an input source of data, a template, and a
- * reference point, generates a list of results from the input, and copies
- * part of the template for each result. Templates may generate content
- * recursively, using the same template, but with the previous iteration's
- * results as the reference point. As an example, for an XML datasource the
- * initial reference point would be a specific node in the DOM tree and a
- * template might generate a list of all child nodes. For the next iteration,
- * those children would be used to generate output for their child nodes and
- * so forth.
- *
- * A template builder is attached to a single DOM node; this node is called
- * the root node and is expected to contain a XUL template element as a direct
- * child. Different template builders may be specialized in the manner in
- * which they generate and display the resulting content from the template.
- *
- * The structure of a template is as follows:
- *
- * <rootnode datasources="" ref="">
- *   <template>
- *     <queryset>
- *       <query>
- *       </query>
- *       <rule>
- *         <conditions>...</conditions>
- *         <bindings>...</bindings>
- *         <action>...</action>
- *       </rule>
- *     </queryset>
- *   </template>
- * </rootnode>
- *
- * The datasources attribute on the root node is used to identify the source
- * of data to be used. The ref attribute is used to specify the reference
- * point for the query. Currently, the datasource will either be an
- * nsIRDFDataSource or a DOM node. In the future, other datasource types may
- * be used.
- *
- * The <queryset> element contains a single query and one or more <rule>
- * elements. There may be more than one <queryset> if multiple queries are
- * desired, and this element is optional if only one query is needed -- in
- * that case the <query> and <rule>s are allowed to be children of the
- * <template> node
- *
- * The contents of the query are processed by a separate component called a
- * query processor. This query processor is expected to use this query to
- * generate results when asked by the template builder. The template builder
- * then generates output for each result based on the <rule> elements.
- *
- * This allows the query processor to be specific to a particular kind of
- * input data or query syntax, while the template builder remains independent
- * of the kind of data being used. Due to this, the query processor will be
- * supplied with the datasource and query which the template builder handles
- * in an opaque way, while the query processor handles these more
- * specifically.
- *
- * Results implement the nsIXULTemplateResult interface and may be identified
- * by an id which must be unique within a given set of query results.
- *
- * Each query may be accompanied by one or more <rule> elements. These rules
- * are evaluated by the template builder for each result produced by the
- * query. A rule consists of conditions that cause a rule to be either
- * accepted or rejected. The condition syntax allows for common conditional
- * handling; additional filtering may be applied by adding a custom filter
- * to a rule with the builder's addRuleFilter method.
- *
- * If a result passes a rule's conditions, this is considered a match, and the
- * content within the rule's <action> body is inserted as a sibling of the
- * <template>, assuming the template builder creates real DOM content. Only
- * one rule will match a result. For a tree builder, for example, the content
- * within the action body is used to create the tree rows instead. A matching
- * result must have its ruleMatched method called. When a result no longer
- * matches, the result's hasBeenRemoved method must be called.
- *
- * Optionally, the rule may have a <bindings> section which may be used to
- * define additional variables to be used within an action body. Each of these
- * declared bindings must be supplied to the query processor via its
- * addBinding method. The bindings are evaluated after a rule has matched.
- *
- * Templates may generate content recursively, using the previous iteration's
- * results as reference point to invoke the same queries. Since the reference
- * point is different, different output will typically be generated.
- *
- * The reference point nsIXULTemplateResult object for the first iteration is
- * determined by calling the query processor's translateRef method using the
- * value of the root node's ref attribute. This object may be retrieved later
- * via the builder's rootResult property.
- *
- * For convenience, each reference point as well as all results implement the
- * nsIXULTemplateResult interface, allowing the result objects from each
- * iteration to be used directly as the reference points for the next
- * iteration.
- *
- * When using multiple queries, each may generate results with the same id.
- * More than one of these results may match one of the rules in their
- * respective queries, however only the result for the earliest matching query
- * in the template becomes the active match and generates output. The
- * addResult, removeResult, replaceResult and resultBindingChanged methods may
- * be called by the query processor to indicate that the set of valid results
- * has changed, such that a different query may match. If a different match
- * would become active, the content for the existing match is removed and the
- * content for the new match is generated. A query processor is not required
- * to provide any support for updating results after they have been generated.
- *
- * See http://wiki.mozilla.org/XUL:Templates_Plan for details about templates.
- */
-[scriptable, uuid(A583B676-5B02-4F9C-A0C9-CB850CB99818)]
-interface nsIXULTemplateBuilder : nsISupports
-{
-    /**
-     * The root node in the DOM to which this builder is attached.
-     */
-    readonly attribute nsIDOMElement root;
-
-    /**
-     * The opaque datasource object that is used for the template. This object
-     * is created by the getDataSource method of the query processor. May be
-     * null if the datasource has not been loaded yet. Set this attribute to
-     * use a different datasource and rebuild the template.
-     *
-     * For an RDF datasource, this will be the same as the database. For XML
-     * this will be the nsIDOMNode for the datasource document or node for
-     * an inline reference (such as #name). Other query processors may use
-     * other types for the datasource.
-     */
-    attribute nsISupports datasource;
-
-    /**
-     * The composite datasource that the template builder observes
-     * and uses to create content. This is used only for RDF queries and is
-     * maintained for backwards compatibility. It will be the same object as
-     * the datasource property. For non-RDF queries, it will always be null.
-     */
-    readonly attribute nsIRDFCompositeDataSource database;
-
-    /**
-     * The virtual result representing the starting reference point,
-     * determined by calling the query processor's translateRef method
-     * with the root node's ref attribute as an argument.
-     */
-    readonly attribute nsIXULTemplateResult rootResult;
-
-    /**
-     * The query processor used to generate results.
-     */
-    [noscript] readonly attribute nsIXULTemplateQueryProcessor queryProcessor;
-
-    /**
-     * Force the template builder to rebuild its content. All existing content
-     * will be removed first. The query processor's done() method will be
-     * invoked during cleanup, followed by its initializeForBuilding method
-     * when the content is to be regenerated.
-     * 
-     */
-    void rebuild();
-
-    /**
-     * Reload any of our RDF datasources that support nsIRDFRemoteDatasource. 
-     *
-     * @note This is a temporary hack so that remote-XUL authors can
-     *       reload remote datasources. When RDF becomes remote-scriptable,
-     *       this will no longer be necessary.
-     */
-    void refresh();
-
-    /**
-     * Inform the template builder that a new result is available. The builder
-     * will add this result to the set of results. The query node that the
-     * new result applies to must be specified using the aQueryNode parameter.
-     *
-     * The builder will apply the rules associated with the query to the new
-     * result, unless a result with the same id from an earlier query
-     * supersedes it, and the result's RuleMatched method will be called if it
-     * matches.
-     *
-     * @param aResult the result to add
-     * @param aQueryNode the query that the result applies to
-     *
-     * @throws NS_ERROR_NULL_POINTER if aResult or aQueryNode are null
-     */
-    void addResult(in nsIXULTemplateResult aResult, in nsIDOMNode aQueryNode);
-
-    /**
-     * Inform the template builder that a result no longer applies. The builder
-     * will call the remove content generated for the result, if any. If a different
-     * query would then match instead, it will become the active match. This
-     * method will have no effect if the result isn't known to the builder.
-     *
-     * @param aResult the result to remove
-     *
-     * @throws NS_ERROR_NULL_POINTER if aResult is null
-     */
-    void removeResult(in nsIXULTemplateResult aResult);
-
-    /**
-     * Inform the template builder that one result should be replaced with
-     * another. Both the old result (aOldResult) and the new result
-     * (aNewResult) must have the same id. The query node that the new result
-     * applies to must be specified using the aQueryNode parameter.
-     *
-     * This method is expected to have the same effect as calling both
-     * removeResult for the old result and addResult for the new result.
-     *
-     * @param aOldResult the old result
-     * @param aNewResult the new result
-     * @param aQueryNode the query that the new result applies to
-     *
-     * @throws NS_ERROR_NULL_POINTER if either argument is null, or
-     *         NS_ERROR_INVALID_ARG if the ids don't match
-     */
-    void replaceResult(in nsIXULTemplateResult aOldResult,
-                       in nsIXULTemplateResult aNewResult,
-                       in nsIDOMNode aQueryNode);
-
-    /**
-     * Inform the template builder that one or more of the optional bindings
-     * for a result has changed. In this case, the rules are not reapplied as
-     * it is expected that the same rule will still apply. The builder will
-     * resynchronize any variables that are referenced in the action body.
-     *
-     * @param aResult the result to change
-     *
-     * @throws NS_ERROR_NULL_POINTER if aResult is null
-     */
-    void resultBindingChanged(in nsIXULTemplateResult aResult);
-
-    /**
-     * Return the result for a given id. Only one such result is returned and
-     * is always the result with that id associated with the active match.
-     * This method will return null is there is no result for the id.
-     *
-     * @param aId the id to return the result for
-     */
-    nsIXULTemplateResult getResultForId(in AString aId);
-
-    /**
-     * Retrieve the result corresponding to a generated element, or null is
-     * there isn't one.
-     *
-     * @param aContent element to result the result of
-     */
-    nsIXULTemplateResult getResultForContent(in nsIDOMElement aElement);
-
-    /**
-     * Returns true if the node has content generated for it. This method is
-     * intended to be called only by the RDF query processor. If aTag is set,
-     * the content must have a tag name that matches aTag. aTag may be ignored
-     * for builders that don't generate real DOM content.
-     *
-     * @param aNode node to check
-     * @param aTag tag that must match
-     */
-    [noscript] boolean hasGeneratedContent(in nsIRDFResource aNode,
-                                           in nsAtomPtr aTag);
-
-    /**
-     * Adds a rule filter for a given rule, which may be used for specialized
-     * rule filtering. Any existing filter on the rule is removed. The default
-     * conditions specified inside the <rule> tag are applied before the
-     * rule filter is applied, meaning that the filter may be used to further
-     * filter out results but not reaccept results that have already been
-     * rejected.
-     *
-     * @param aRule the rule to apply the filter to
-     * @param aFilter the filter to add
-     */
-    void addRuleFilter(in nsIDOMNode aRule, in nsIXULTemplateRuleFilter aFilter);
-
-    /**
-     * Invoked lazily by a XUL element that needs its child content built.
-     * If aForceCreation is true, then the contents of an element will be
-     * generated even if it is closed. If false, the element will only
-     * generate its contents if it is open. This behaviour is used with menus.
-     */
-    [noscript] void createContents(in Element aElement,
-                                   in boolean aForceCreation);
-
-    /**
-     * Add a listener to this template builder. The template builder
-     * holds a strong reference to the listener.
-     */
-    void addListener(in nsIXULBuilderListener aListener);
-
-    /**
-     * Remove a listener from this template builder.
-     */
-    void removeListener(in nsIXULBuilderListener aListener);
-};
-
-/**
- * nsIXULTreeBuilderObserver
- *  This interface allows clients of the XULTreeBuilder to define domain 
- *  specific handling of specific nsITreeView methods that 
- *  XULTreeBuilder does not implement.
- */
-[scriptable, uuid(57CED9A7-EC0B-4A0E-8AEB-5DA32EBE951C)]
-interface nsIXULTreeBuilderObserver : nsISupports
-{
-    const long DROP_BEFORE = -1;
-    const long DROP_ON = 0;
-    const long DROP_AFTER = 1;
-    /**
-     * Methods used by the drag feedback code to determine if a drag is allowable at
-     * the current location. To get the behavior where drops are only allowed on
-     * items, such as the mailNews folder pane, always return false whe
-     * the orientation is not DROP_ON.
-     */
-    boolean canDrop(in long index, in long orientation, in nsIDOMDataTransfer dataTransfer);
-
-    /**
-     * Called when the user drops something on this view. The |orientation| param
-     * specifies before/on/after the given |row|.
-     */
-    void onDrop(in long row, in long orientation, in nsIDOMDataTransfer dataTransfer);
- 
-    /** 
-     * Called when an item is opened or closed. 
-     */
-    void onToggleOpenState (in long index);
-
-    /** 
-	 * Called when a header is clicked.
-     */
-    void onCycleHeader(in wstring colID, in nsIDOMElement elt);
-
-    /**
-     * Called when a cell in a non-selectable cycling column (e.g. 
-     * unread/flag/etc.) is clicked.
-     */
-    void onCycleCell(in long row, in wstring colID);
-
-    /** 
-     * Called when selection in the tree changes
-     */
-    void onSelectionChanged();
-
-    /**
-     * A command API that can be used to invoke commands on the selection.  
-     * The tree will automatically invoke this method when certain keys 
-     * are pressed.  For example, when the DEL key is pressed, performAction 
-     * will be called with the "delete" string. 
-     */
-    void onPerformAction(in wstring action);
-
-    /**
-     * A command API that can be used to invoke commands on a specific row.
-     */
-    void onPerformActionOnRow(in wstring action, in long row);
-
-    /**
-     * A command API that can be used to invoke commands on a specific cell.
-     */
-    void onPerformActionOnCell(in wstring action, in long row, in wstring colID);
-};
-
-[scriptable, uuid(06b31b15-ebf5-4e74-a0e2-6bc0a18a3969)]
-interface nsIXULTreeBuilder : nsISupports
-{
-    /**
-     * Retrieve the RDF resource associated with the specified row.
-     */
-    nsIRDFResource getResourceAtIndex(in long aRowIndex);
-
-    /**
-     * Retrieve the index associated with specified RDF resource.
-     */
-    long getIndexOfResource(in nsIRDFResource resource);
-
-    /** 
-     * Add a Tree Builder Observer to handle Tree View 
-     * methods that the base builder does not implement. 
-     */
-    void addObserver(in nsIXULTreeBuilderObserver aObserver);
-
-    /** 
-     * Remove an Tree Builder Observer.
-     */
-    void removeObserver(in nsIXULTreeBuilderObserver aObserver);
-
-    /** 
-     * Sort the contents of the tree using the specified column.
-     */
-    void sort(in nsIDOMElement aColumnElement);
-};
-
deleted file mode 100644
--- a/dom/xul/templates/nsIXULTemplateQueryProcessor.idl
+++ /dev/null
@@ -1,280 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "domstubs.idl"
-
-interface nsIArray;
-interface nsISimpleEnumerator;
-interface nsIXULTemplateResult;
-interface nsIXULTemplateRuleFilter;
-interface nsIXULTemplateBuilder;
-
-%{C++
-class nsAtom;
-%}
-[ptr] native nsAtomPtr(nsAtom);
-
-/**
- * A query processor takes a template query and generates results for it given
- * a datasource and a reference point. There is a one-to-one relationship
- * between a template builder and a query processor. The template builder
- * creates the query processor, and there is no other means to retrieve it.
- *
- * A template query is the contents inside a <query> element within the
- * template. The actual syntax is opaque to the template builder and defined
- * by a query processor. The query is expected to consist of either text or
- * DOM nodes that, when executed by a call to the generateResults method, will
- * allow the generation of a list of results.
- *
- * The template builder will supply two variables, the reference variable and
- * the member variable to further indicate what part of the datasource is to
- * be examined in addition to the query itself. The reference is always
- * a placeholder for the starting point and the member is always a placeholder
- * for the end points (the results).
- *
- * The reference point is important when generating output recursively, as
- * the query will be the same for each iteration, however, the reference point
- * will differ.
- *
- * For instance, when examining an XML source, an XML query processor might
- * begin at the node referred by the reference variable and end at a list of
- * that node's children.
- *
- * Some queries may not need the reference variable if the syntax or the form
- * of the data implies the value. For instance, a datasource that holds a
- * table that can only produce one set of results.
- *
- * The reference variable may be specified in a template by setting the
- * "container" attribute on the <template> element to the variable to use. The
- * member variable may be specified in a similar way using the "member"
- * attribute, or it may be specified in the first <action> body in the
- * template as the value of a uri attribute on an element. A breadth-first
- * search of the first action is performed to find this element.
- *
- * If unspecified, the default value of the reference variable is ?uri.
- *
- * For example, a query might have the following syntax:
- *
- * (?id, ?name, ?url) from Bookmarks where parentfolder = ?start
- *
- * This query might generate a result for each bookmark within a given folder.
- * The variable ?start would be the reference variable, while the variable ?id
- * would be the member variable, since it is the unique value that identifies
- * a result. Each result will have the four variables referred to defined for
- * it and the values may be retrieved using the result's getBindingFor and
- * getBindingObjectFor methods.
- *
- * The template builder must call initializeForBuilding before the other
- * methods, except for translateRef. The builder will then call compileQuery
- * for each query in the template to compile the queries. When results need
- * to be generated, the builder will call generateResults. The
- * initializeForBuilding, compileQuery and addBinding methods may not be
- * called after generateResults has been called until the builder indicates
- * that the generated output is being removed by calling the done method.
- *
- * Currently, the datasource supplied to the methods will always be an
- * nsIRDFDataSource or a DOM node, and will always be the same one in between
- * calls to initializeForBuilding and done.
- */
-[scriptable, uuid(C257573F-444F-468A-BA27-DE979DC55FE4)]
-interface nsIXULTemplateQueryProcessor : nsISupports
-{
-  /**
-   * Retrieve the datasource to use for the query processor. The list of
-   * datasources in a template is specified using the datasources attribute as
-   * a space separated list of URIs. This list is processed by the builder and
-   * supplied to the query processor in the aDataSources array as a list of
-   * nsIURI objects or nsIDOMNode objects. This method may return an object
-   * corresponding to these URIs and the builder will supply this object to
-   * other query processor methods. For example, for an XML source, the
-   * datasource might be an nsIDOMNode.
-   *
-   * All of these URIs are checked by the builder so it is safe to use them,
-   * however note that a URI that redirects may still needs to be checked to
-   * ensure that the document containing aRootNode may access it. This is the
-   * responsibility of the query processor if it needs to load the content of
-   * the URI.
-   *
-   * If the query processor needs to load the datasource asynchronously, it
-   * may set the aShouldDelayBuilding returned parameter to true to delay
-   * building the template content, and call the builder's Rebuild method when
-   * the data is available.
-   *
-   * @param aDataSources  the list of nsIURI objects and/or nsIDOMNode objects
-   * @param aRootNode     the root node the builder is attached to
-   * @param aIsTrusted    true if the template is in a trusted document
-   * @param aBuilder      the template builder
-   * @param aShouldDelayBuilding [out] whether the builder should wait to
-   *                                   build the content or not
-   * @returns a datasource object
-   */
-  nsISupports getDatasource(in nsIArray aDataSources,
-                            in nsIDOMNode aRootNode,
-                            in boolean aIsTrusted,
-                            in nsIXULTemplateBuilder aBuilder,
-                            out boolean aShouldDelayBuilding);
-
-  /**
-   * Initialize for query generation. This will be called before the rules are
-   * processed and whenever the template is rebuilt. This method must be
-   * called once before any of the other query processor methods except for
-   * translateRef.
-   *
-   * @param aDatasource datasource for the data
-   * @param aBuilder the template builder
-   * @param aRootNode the root node the builder is attached to
-   *
-   * @throws NS_ERROR_INVALID_ARG if the datasource is not supported or
-   *         NS_ERROR_UNEXPECTED if generateResults has already been called.
-   */
-  void initializeForBuilding(in nsISupports aDatasource,
-                             in nsIXULTemplateBuilder aBuilder,
-                             in nsIDOMNode aRootNode);
-
-  /**
-   * Called when the template builder is being destroyed so that the query
-   * processor can clean up any state. The query processor should remove as
-   * much state as possible, such as results or references to the builder.
-   * This method will also be called when the template is going to be rebuilt.
-   */
-  void done();
-
-  /**
-   * Compile a query from a node. The result of this function will later be
-   * passed to generateResults for result generation. If null is returned,
-   * the query will be ignored.
-   *
-   * The template builder will call this method once for each query within
-   * the template, before any results can be generated using generateResults,
-   * but after initializeForBuilding has been called. This method should not
-   * be called again for the same query unless the template is rebuilt.
-   *
-   * The reference variable may be used by the query processor as a
-   * placeholder for the reference point, or starting point in the query.
-   *
-   * The member variable is determined from the member attribute on the
-   * template, or from the uri in the first action's rule if that attribute is
-   * not present. A rule processor may use the member variable as a hint to
-   * indicate what variable is expected to contain the results.
-   *
-   * @param aBuilder the template builder
-   * @param aQuery <query> node to compile
-   * @param aRefVariable the reference variable
-   * @param aMemberVariable the member variable
-   *
-   * @returns a compiled query object
-   */
-  [noscript] nsISupports compileQuery(in nsIXULTemplateBuilder aBuilder,
-                                      in nsIDOMNode aQuery,
-                                      in nsAtomPtr aRefVariable,
-                                      in nsAtomPtr aMemberVariable);
-
-  /**
-   * Generate the results of a query and return them in an enumerator. The
-   * enumerator must contain nsIXULTemplateResult objects. If there are no
-   * results, an empty enumerator must be returned.
-   *
-   * The datasource will be the same as the one passed to the earlier
-   * initializeForBuilding method. The context reference (aRef) is a reference
-   * point used when calculating results.
-   *
-   * The value of aQuery must be the result of a previous call to compileQuery
-   * from this query processor. This method may be called multiple times,
-   * typically with different values for aRef.
-   *
-   * @param aDatasource datasource for the data
-   * @param aRef context reference value used as a starting point
-   * @param aQuery the compiled query returned from query compilation
-   *
-   * @returns an enumerator of nsIXULTemplateResult objects as the results
-   *
-   * @throws NS_ERROR_INVALID_ARG if aQuery is invalid
-   */
-  nsISimpleEnumerator generateResults(in nsISupports aDatasource,
-                                      in nsIXULTemplateResult aRef,
-                                      in nsISupports aQuery);
-
-  /**
-   * Add a variable binding for a particular rule. A binding allows an
-   * additional variable to be set for a result, outside of those defined
-   * within the query. These bindings are always optional, in that they will
-   * never affect the results generated.
-   *
-   * This function will never be called after generateResults. Any bindings
-   * that were added should be applied to each result when the result's
-   * ruleMatched method is called, since the bindings are different for each
-   * rule.
-   *
-   * The reference aRef may be used to determine the reference when
-   * calculating the value for the binding, for example when a value should
-   * depend on the value of another variable.
-   *
-   * The syntax of the expression aExpr is defined by the query processor. If
-   * the syntax is invalid, the binding should be ignored. Only fatal errors
-   * should be thrown, or NS_ERROR_UNEXPECTED if generateResults has already
-   * been called.
-   *
-   * As an example, if the reference aRef is the variable '?count' which
-   * holds the value 5, and the expression aExpr is the string '+2', the value
-   * of the variable aVar would be 7, assuming the query processor considers
-   * the syntax '+2' to mean add two to the reference.
-   *
-   * @param aRuleNode rule to add the binding to
-   * @param aVar variable that will be bound
-   * @param aRef variable that holds reference value
-   * @param aExpr expression used to compute the value to assign
-   */
-  [noscript] void addBinding(in nsIDOMNode aRuleNode,
-                             in nsAtomPtr aVar,
-                             in nsAtomPtr aRef,
-                             in AString aExpr);
-
-  /**
-   * Translate a ref attribute string into a result. This is used as the
-   * reference point by the template builder when generating the first level
-   * of content. For recursive generation, the result from the parent
-   * generation phase will be used directly as the reference so a translation
-   * is not needed. This allows all levels to be generated using objects that
-   * all implement the nsIXULTemplateResult interface.
-   *
-   * This method may be called before initializeForBuilding, so the
-   * implementation may use the supplied datasource if it is needed to
-   * translate the reference.
-   *
-   * @param aDatasource datasource for the data
-   * @param aRefString the ref attribute string
-   *
-   * @return the translated ref
-   */
-  nsIXULTemplateResult translateRef(in nsISupports aDatasource,
-                                    in AString aRefString);
-
-  /**
-   * Compare two results to determine their order, used when sorting results.
-   * This method should return -1 when the left result is less than the right,
-   * 0 if both are equivalent, and 1 if the left is greater than the right.
-   * The comparison should only consider the values for the specified
-   * variable.
-   *
-   * If the comparison variable is null, the results may be
-   * sorted in a natural order, for instance, based on the order the data in
-   * stored in the datasource.
-   *
-   * The sort hints are the flags in nsIXULSortService.
-   *
-   * This method must only be called with results that were created by this
-   * query processor.
-   *
-   * @param aLeft the left result to compare
-   * @param aRight the right result to compare
-   * @param aVar variable to compare
-   *
-   * @param returns -1 if less, 0 if equal, or 1 if greater
-   */
-   [noscript] int32_t compareResults(in nsIXULTemplateResult aLeft,
-                                     in nsIXULTemplateResult aRight,
-                                     in nsAtomPtr aVar,
-                                     in unsigned long aSortHints);
-};
deleted file mode 100644
--- a/dom/xul/templates/nsIXULTemplateResult.idl
+++ /dev/null
@@ -1,120 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-
-interface nsIDOMNode;
-interface nsIRDFResource;
-
-%{C++
-class nsAtom;
-%}
-[ptr] native nsAtomPtr(nsAtom);
-
-/**
- * A single result generated from a template query. Each result is identified
- * by an id, which must be unique within the set of results produced from a
- * query. The result may optionally be identified by an RDF resource.
- *
- * Generally, the result and its id will be able to uniquely identify a node
- * in the source data, such as an RDF or XML node. In other contexts, such as
- * a database query, a result would represent a particular record.
- *
- * A result is expected to only be created by a query processor.
- *
- * Each result also contains a set of variable bindings. The value for a
- * particular variable may be retrieved using the getBindingFor and
- * getBindingObjectFor methods.
- */
-[scriptable, uuid(ebea0230-36fa-41b7-8e31-760806057965)]
-interface nsIXULTemplateResult : nsISupports
-{
-  /**
-   * True if the result represents a container.
-   */
-  readonly attribute boolean isContainer;
-
-  /**
-   * True if the result represents an empty container.
-   */
-  readonly attribute boolean isEmpty;
-
-  /**
-   * True if the template builder may use this result as the reference point
-   * for additional recursive processing of the template. The template builder
-   * will reprocess the template using this result as the reference point and
-   * generate output content that is expected to be inserted as children of the
-   * output generated for this result. If false, child content is not
-   * processed. This property identifies only the default handling and may be
-   * overriden by syntax used in the template.
-   */
-  readonly attribute boolean mayProcessChildren;
-
-  /**
-   * ID of the result. The DOM element created for this result, if any, will
-   * have its id attribute set to this value. The id must be unique for a
-   * query.
-   */
-  readonly attribute AString id;
-
-  /**
-   * Resource for the result, which may be null. If set, the resource uri
-   * must be the same as the ID property.
-   */
-  readonly attribute nsIRDFResource resource;
-
-  /**
-   * The type of the object. The predefined value 'separator' may be used
-   * for separators. Other values may be used for application specific
-   * purposes.
-   */
-  readonly attribute AString type;
-
-  /**
-   * Get the string representation of the value of a variable for this
-   * result. This string will be used in the action body from a template as
-   * the replacement text. For instance, if the text ?name appears in an
-   * attribute within the action body, it will be replaced with the result
-   * of this method. The question mark is considered part of the variable
-   * name, thus aVar should be ?name and not simply name.
-   *
-   * @param aVar the variable to look up
-   *
-   * @return the value for the variable or a null string if it has no value
-   */
-  [noscript] AString getBindingFor(in nsAtomPtr aVar);
-
-  /**
-   * Get an object value for a variable such as ?name for this result. 
-   *
-   * This method may return null for a variable, even if getBindingFor returns
-   * a non-null value for the same variable. This method is provided as a
-   * convenience when sorting results.
-   *
-   * @param aVar the variable to look up
-   *
-   * @return the value for the variable or null if it has no value
-   */
-  [noscript] nsISupports getBindingObjectFor(in nsAtomPtr aVar);
-
-  /**
-   * Indicate that a particular rule of a query has matched and that output
-   * will be generated for it. Both the query as compiled by the query
-   * processor's compileQuery method and the XUL <rule> element are supplied.
-   * The query must always be one that was compiled by the query processor
-   * that created this result. The <rule> element must always be a child of
-   * the <query> element that was used to compile the query.
-   *
-   * @param aQuery the query that matched
-   * @param aRuleNode the rule node that matched
-   */
-  void ruleMatched(in nsISupports aQuery, in nsIDOMNode aRuleNode);
-
-  /**
-   * Indicate that the output for a result has beeen removed and that the
-   * result is no longer being used by the builder.
-   */
-  void hasBeenRemoved();
-};
deleted file mode 100644
--- a/dom/xul/templates/nsIXULTemplateRuleFilter.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "domstubs.idl"
-
-interface nsISupports;
-interface nsIXULTemplateResult;
-
-/**
- * A rule filter may be used to add additional filtering of results to a rule.
- * The filter is used to further reject results from matching the template's
- * rules, beyond what the template syntax can do itself, thus allowing for
- * more complex result filtering. The rule filter is applied after the rule
- * syntax within the template.
- *
- * Only one filter may apply to each rule within the template and may be
- * assigned using the template builder's addRuleFilter method.
- */
-[scriptable, uuid(819cd1ed-8010-42e1-a8b9-778b726a1ff3)]
-interface nsIXULTemplateRuleFilter : nsISupports
-{
-  /**
-   * Evaluate a result and return true if the result is accepted by this
-   * filter, or false if it is rejected. Accepted results will have output
-   * generated for them for the rule. Rejected results will not, but they
-   * may still match another rule.
-   *
-   * @param aRef the result to examine
-   * @param aRule the rule node
-   *
-   * @return true if the rule matches
-   */
-  boolean match(in nsIXULTemplateResult aRef, in nsIDOMNode aRule);
-};
deleted file mode 100644
--- a/dom/xul/templates/nsInstantiationNode.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsInstantiationNode.h"
-#include "nsTemplateRule.h"
-#include "nsXULTemplateQueryProcessorRDF.h"
-
-#include "mozilla/Logging.h"
-extern mozilla::LazyLogModule gXULTemplateLog;
-
-nsInstantiationNode::nsInstantiationNode(nsXULTemplateQueryProcessorRDF* aProcessor,
-                                         nsRDFQuery* aQuery)
-        : mProcessor(aProcessor),
-          mQuery(aQuery)
-{
-    MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-           ("nsInstantiationNode[%p] query=%p", this, aQuery));
-
-    MOZ_COUNT_CTOR(nsInstantiationNode);
-}
-
-
-nsInstantiationNode::~nsInstantiationNode()
-{
-    MOZ_COUNT_DTOR(nsInstantiationNode);
-}
-
-nsresult
-nsInstantiationNode::Propagate(InstantiationSet& aInstantiations,
-                               bool aIsUpdate, bool& aTakenInstantiations)
-{
-    // In update mode, iterate through the results and call the template
-    // builder to update them. In non-update mode, cache them in the processor
-    // to be used during processing. The results are cached in the processor
-    // so that the simple rules are only computed once. In this situation, all
-    // data for all queries are calculated at once.
-    nsresult rv = NS_OK;
-
-    aTakenInstantiations = false;
-
-    if (aIsUpdate) {
-        // Iterate through newly added keys to determine which rules fired.
-        //
-        // XXXwaterson Unfortunately, this could also lead to retractions;
-        // e.g., (container ?a ^empty false) could become "unmatched". How
-        // to track those?
-        nsCOMPtr<nsIDOMNode> querynode;
-        mQuery->GetQueryNode(getter_AddRefs(querynode));
-
-        InstantiationSet::ConstIterator last = aInstantiations.Last();
-        for (InstantiationSet::ConstIterator inst = aInstantiations.First(); inst != last; ++inst) {
-            nsAssignmentSet assignments = inst->mAssignments;
-
-            nsCOMPtr<nsIRDFNode> node;
-            assignments.GetAssignmentFor(mQuery->mMemberVariable,
-                                         getter_AddRefs(node));
-            if (node) {
-                nsCOMPtr<nsIRDFResource> resource = do_QueryInterface(node);
-                if (resource) {
-                    RefPtr<nsXULTemplateResultRDF> nextresult =
-                        new nsXULTemplateResultRDF(mQuery, *inst, resource);
-                    if (! nextresult)
-                        return NS_ERROR_OUT_OF_MEMORY;
-
-                    rv = mProcessor->AddMemoryElements(*inst, nextresult);
-                    if (NS_FAILED(rv))
-                        return rv;
-
-                    mProcessor->GetBuilder()->AddResult(nextresult, querynode);
-                }
-            }
-        }
-    }
-    else {
-        nsresult rv = mQuery->SetCachedResults(mProcessor, aInstantiations);
-        if (NS_SUCCEEDED(rv))
-            aTakenInstantiations = true;
-    }
-
-    return rv;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsInstantiationNode.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsInstantiationNode_h__
-#define nsInstantiationNode_h__
-
-#include "mozilla/Attributes.h"
-#include "nsRuleNetwork.h"
-#include "nsRDFQuery.h"
-
-class nsXULTemplateQueryProcessorRDF;
-
-/**
- * A leaf-level node in the rule network. If any instantiations
- * propagate to this node, then we know we've matched a rule.
- */
-class nsInstantiationNode : public ReteNode
-{
-public:
-    nsInstantiationNode(nsXULTemplateQueryProcessorRDF* aProcessor,
-                        nsRDFQuery* aRule);
-
-    ~nsInstantiationNode();
-
-    // "downward" propagations
-    virtual nsresult Propagate(InstantiationSet& aInstantiations,
-                               bool aIsUpdate, bool& aMatched) override;
-
-protected:
-
-    nsXULTemplateQueryProcessorRDF* mProcessor;
-    nsRDFQuery* mQuery;
-};
-
-#endif // nsInstantiationNode_h__
deleted file mode 100644
--- a/dom/xul/templates/nsRDFBinding.cpp
+++ /dev/null
@@ -1,265 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsXULTemplateQueryProcessorRDF.h"
-#include "nsXULTemplateResultRDF.h"
-#include "nsRDFBinding.h"
-
-#ifdef DEBUG
-#include "nsXULContentUtils.h"
-#endif
-
-RDFBindingSet::~RDFBindingSet()
-{
-    while (mFirst) {
-        RDFBinding* doomed = mFirst;
-        mFirst = mFirst->mNext;
-        delete doomed;
-    }
-
-    MOZ_COUNT_DTOR(RDFBindingSet);
-}
-
-nsresult
-RDFBindingSet::AddBinding(nsAtom* aVar, nsAtom* aRef, nsIRDFResource* aPredicate)
-{
-    RDFBinding* newbinding = new RDFBinding(aRef, aPredicate, aVar);
-    if (mFirst) {
-        RDFBinding* binding = mFirst;
-
-        while (binding) {
-            // the binding is dependant on the calculation of a previous binding
-            if (binding->mSubjectVariable == aVar)
-                newbinding->mHasDependency = true;
-
-            // if the target variable is already used in a binding, ignore it
-            // since it won't be useful for anything
-            if (binding->mTargetVariable == aVar) {
-                delete newbinding;
-                return NS_OK;
-            }
-
-            // add the binding at the end of the list
-            if (! binding->mNext) {
-                binding->mNext = newbinding;
-                break;
-            }
-
-            binding = binding->mNext;
-        }
-    }
-    else {
-        mFirst = newbinding;
-    }
-
-    mCount++;
-
-    return NS_OK;
-}
-
-bool
-RDFBindingSet::SyncAssignments(nsIRDFResource* aSubject,
-                               nsIRDFResource* aPredicate,
-                               nsIRDFNode* aTarget,
-                               nsAtom* aMemberVariable,
-                               nsXULTemplateResultRDF* aResult,
-                               nsBindingValues& aBindingValues)
-{
-    NS_ASSERTION(aBindingValues.GetBindingSet() == this,
-                 "nsBindingValues not for this RDFBindingSet");
-    NS_PRECONDITION(aResult, "Must have result");
-
-    bool needSync = false;
-    nsCOMPtr<nsIRDFNode>* valuesArray = aBindingValues.ValuesArray();
-    if (!valuesArray)
-        return false;
-
-    RDFBinding* binding = mFirst;
-    int32_t count = 0;
-
-    // QI for proper comparisons just to be safe
-    nsCOMPtr<nsIRDFNode> subjectnode = do_QueryInterface(aSubject);
-
-    // iterate through the bindings looking for ones that would match the RDF
-    // nodes that were involved in a change
-    nsCOMPtr<nsIRDFNode> value;
-    while (binding) {
-        if (aPredicate == binding->mPredicate) {
-            // if the source of the binding is the member variable, optimize
-            if (binding->mSubjectVariable == aMemberVariable) {
-                valuesArray[count] = aTarget;
-                needSync = true;
-            }
-            else {
-                aResult->GetAssignment(binding->mSubjectVariable, getter_AddRefs(value));
-                if (value == subjectnode) {
-                    valuesArray[count] = aTarget;
-                    needSync = true;
-                }
-            }
-        }
-
-        binding = binding->mNext;
-        count++;
-    }
-
-    return needSync;
-}
-
-void
-RDFBindingSet::AddDependencies(nsIRDFResource* aSubject,
-                               nsXULTemplateResultRDF* aResult)
-{
-    NS_PRECONDITION(aResult, "Must have result");
-
-    // iterate through the bindings and add binding dependencies to the
-    // processor
-
-    nsXULTemplateQueryProcessorRDF* processor = aResult->GetProcessor();
-    if (! processor)
-        return;
-
-    nsCOMPtr<nsIRDFNode> value;
-
-    RDFBinding* binding = mFirst;
-    while (binding) {
-        aResult->GetAssignment(binding->mSubjectVariable, getter_AddRefs(value));
-
-        nsCOMPtr<nsIRDFResource> valueres = do_QueryInterface(value);
-        if (valueres)
-            processor->AddBindingDependency(aResult, valueres);
-
-        binding = binding->mNext;
-    }
-}
-
-void
-RDFBindingSet::RemoveDependencies(nsIRDFResource* aSubject,
-                                  nsXULTemplateResultRDF* aResult)
-{
-    NS_PRECONDITION(aResult, "Must have result");
-
-    // iterate through the bindings and remove binding dependencies from the
-    // processor
-
-    nsXULTemplateQueryProcessorRDF* processor = aResult->GetProcessor();
-    if (! processor)
-        return;
-
-    nsCOMPtr<nsIRDFNode> value;
-
-    RDFBinding* binding = mFirst;
-    while (binding) {
-        aResult->GetAssignment(binding->mSubjectVariable, getter_AddRefs(value));
-
-        nsCOMPtr<nsIRDFResource> valueres = do_QueryInterface(value);
-        if (valueres)
-            processor->RemoveBindingDependency(aResult, valueres);
-
-        binding = binding->mNext;
-    }
-}
-
-int32_t
-RDFBindingSet::LookupTargetIndex(nsAtom* aTargetVariable, RDFBinding** aBinding)
-{
-    int32_t idx = 0;
-    RDFBinding* binding = mFirst;
-
-    while (binding) {
-        if (binding->mTargetVariable == aTargetVariable) {
-            *aBinding = binding;
-            return idx;
-        }
-        idx++;
-        binding = binding->mNext;
-    }
-
-    return -1;
-}
-
-nsBindingValues::~nsBindingValues()
-{
-    ClearBindingSet();
-    MOZ_COUNT_DTOR(nsBindingValues);
-}
-
-void
-nsBindingValues::ClearBindingSet()
-{
-    if (mBindings && mValues) {
-        delete [] mValues;
-        mValues = nullptr;
-    }
-
-    mBindings = nullptr;
-}
-
-nsresult
-nsBindingValues::SetBindingSet(RDFBindingSet* aBindings)
-{
-    ClearBindingSet();
-
-    int32_t count = aBindings->Count();
-    if (count) {
-        mValues = new nsCOMPtr<nsIRDFNode>[count];
-        mBindings = aBindings;
-    }
-    else {
-        mValues = nullptr;
-    }
-
-    return NS_OK;
-}
-
-void
-nsBindingValues::GetAssignmentFor(nsXULTemplateResultRDF* aResult,
-                                  nsAtom* aVar,
-                                  nsIRDFNode** aValue)
-{
-    *aValue = nullptr;
-
-    // assignments are calculated lazily when asked for. The only issue is
-    // when a binding has no value in the RDF graph, it will be checked again
-    // every time.
-
-    if (mBindings && mValues) {
-        RDFBinding* binding;
-        int32_t idx = mBindings->LookupTargetIndex(aVar, &binding);
-        if (idx >= 0) {
-            *aValue = mValues[idx];
-            if (*aValue) {
-                NS_ADDREF(*aValue);
-            }
-            else {
-                nsXULTemplateQueryProcessorRDF* processor = aResult->GetProcessor();
-                if (! processor)
-                    return;
-
-                nsIRDFDataSource* ds = processor->GetDataSource();
-                if (! ds)
-                    return;
-
-                nsCOMPtr<nsIRDFNode> subjectValue;
-                aResult->GetAssignment(binding->mSubjectVariable,
-                                       getter_AddRefs(subjectValue));
-                if (subjectValue) {
-                    nsCOMPtr<nsIRDFResource> subject = do_QueryInterface(subjectValue);
-                    ds->GetTarget(subject, binding->mPredicate, true, aValue);
-                    if (*aValue)
-                        mValues[idx] = *aValue;
-                }
-            }
-        }
-    }
-}
-
-void
-nsBindingValues::RemoveDependencies(nsIRDFResource* aSubject,
-                                    nsXULTemplateResultRDF* aResult)
-{
-    if (mBindings)
-        mBindings->RemoveDependencies(aSubject, aResult);
-}
deleted file mode 100644
--- a/dom/xul/templates/nsRDFBinding.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsRDFBinding_h__
-#define nsRDFBinding_h__
-
-#include "nsAtom.h"
-#include "nsIRDFResource.h"
-#include "nsISupportsImpl.h"
-
-class nsXULTemplateResultRDF;
-class nsBindingValues;
-
-/*
- * Classes related to storing bindings for RDF handling.
- */
-
-/*
- * a  <binding> descriptors
- */
-class RDFBinding {
-
-public:
-
-    RefPtr<nsAtom>        mSubjectVariable;
-    nsCOMPtr<nsIRDFResource> mPredicate;
-    RefPtr<nsAtom>        mTargetVariable;
-
-    // indicates whether a binding is dependant on the result from a
-    // previous binding
-    bool                     mHasDependency;
-
-    RDFBinding*              mNext;
-
-private:
-
-    friend class RDFBindingSet;
-
-    RDFBinding(nsAtom* aSubjectVariable,
-               nsIRDFResource* aPredicate,
-               nsAtom* aTargetVariable)
-      : mSubjectVariable(aSubjectVariable),
-        mPredicate(aPredicate),
-        mTargetVariable(aTargetVariable),
-        mHasDependency(false),
-        mNext(nullptr)
-    {
-        MOZ_COUNT_CTOR(RDFBinding);
-    }
-
-    ~RDFBinding()
-    {
-        MOZ_COUNT_DTOR(RDFBinding);
-    }
-};
-
-/*
- * a collection of <binding> descriptors. This object is refcounted by
- * nsBindingValues objects and the query processor.
- */
-class RDFBindingSet final
-{
-private:
-    // Private destructor, to discourage deletion outside of Release():
-    ~RDFBindingSet();
-
-    // the number of bindings
-    int32_t mCount;
-
-    // pointer to the first binding in a linked list
-    RDFBinding* mFirst;
-
-public:
-
-    RDFBindingSet()
-        : mCount(0),
-          mFirst(nullptr)
-    {
-        MOZ_COUNT_CTOR(RDFBindingSet);
-    }
-
-    NS_INLINE_DECL_REFCOUNTING(RDFBindingSet)
-
-    int32_t Count() const { return mCount; }
-
-    /*
-     * Add a binding (aRef -> aPredicate -> aVar) to the set
-     */
-    nsresult
-    AddBinding(nsAtom* aVar, nsAtom* aRef, nsIRDFResource* aPredicate);
-
-    /*
-     * Return true if the binding set contains a binding which would cause
-     * the result to need resynchronizing for an RDF triple. The member
-     * variable may be supplied as an optimization since bindings most
-     * commonly use the member variable as the subject. If aMemberVariable
-     * is set, aSubject must be the value of the member variable for the
-     * result. The supplied binding values aBindingValues must be values
-     * using this binding set (that is aBindingValues->GetBindingSet() == this)
-     *
-     * @param aSubject subject of the RDF triple
-     * @param aPredicate predicate of the RDF triple
-     * @param aTarget target of the RDF triple
-     * @param aMemberVariable member variable for the query for the binding
-     * @param aResult result to synchronize
-     * @param aBindingValues the values for the bindings for the result
-     */
-    bool
-    SyncAssignments(nsIRDFResource* aSubject,
-                    nsIRDFResource* aPredicate,
-                    nsIRDFNode* aTarget,
-                    nsAtom* aMemberVariable,
-                    nsXULTemplateResultRDF* aResult,
-                    nsBindingValues& aBindingValues);
-
-    /*
-     * The query processor maintains a map of subjects to an array of results.
-     * This is used such that when a new assertion is added to the RDF graph,
-     * the results associated with the subject of that triple may be checked
-     * to see if their bindings have changed. The AddDependencies method adds
-     * these subject dependencies to the map.
-     */
-    void
-    AddDependencies(nsIRDFResource* aSubject,
-                    nsXULTemplateResultRDF* aResult);
-
-    /*
-     * Remove the results from the dependencies map when results are deleted.
-     */
-    void
-    RemoveDependencies(nsIRDFResource* aSubject,
-                       nsXULTemplateResultRDF* aResult);
-
-    /*
-     * The nsBindingValues classes stores an array of values, one for each
-     * target symbol that could be set by the bindings in the set.
-     * LookupTargetIndex determines the index into the array for a given
-     * target symbol.
-     */
-    int32_t
-    LookupTargetIndex(nsAtom* aTargetVariable, RDFBinding** aBinding);
-};
-
-/*
- * A set of values of bindings. This object is used once per result.
- * This stores a reference to the binding set and an array of node values.
- * Since the binding set is used once per query and the values are
- * used once per result, we reduce size by only storing the value array's
- * length in the binding set. This is possible since the array is always
- * a fixed length for a particular binding set.
- *
- * XXX ndeakin We may want to revisit this later since it makes the code
- *             more complicated.
- */
-class nsBindingValues
-{
-protected:
-
-    // the binding set
-    RefPtr<RDFBindingSet> mBindings;
-
-    /*
-     * A set of values for variable bindings. To look up a binding value,
-     * scan through the binding set in mBindings for the right target atom.
-     * Its index will correspond to the index in this array. The size of this
-     * array is determined by the RDFBindingSet's Count().
-     */
-    nsCOMPtr<nsIRDFNode>* mValues;
-
-public:
-
-    nsBindingValues()
-      : mBindings(nullptr),
-        mValues(nullptr)
-    {
-        MOZ_COUNT_CTOR(nsBindingValues);
-    }
-
-    ~nsBindingValues();
-
-
-    /**
-     * Clear the binding set, to be called when the nsBindingValues is deleted
-     * or a new binding set is being set.
-     */
-    void ClearBindingSet();
-
-    RDFBindingSet* GetBindingSet() { return mBindings; }
-
-    /**
-     * Set the binding set to use. This needs to be called once a rule matches
-     * since it is then known which bindings will apply.
-     */
-    nsresult SetBindingSet(RDFBindingSet* aBindings);
-
-    nsCOMPtr<nsIRDFNode>* ValuesArray() { return mValues; }
-
-    /*
-     * Retrieve the assignment for a particular variable
-     */
-    void
-    GetAssignmentFor(nsXULTemplateResultRDF* aResult,
-                     nsAtom* aVar,
-                     nsIRDFNode** aValue);
-
-    /*
-     * Remove depenedencies the bindings have on particular resources
-     */
-    void
-    RemoveDependencies(nsIRDFResource* aSubject,
-                       nsXULTemplateResultRDF* aResult);
-};
-
-#endif // nsRDFBinding_h__
deleted file mode 100644
--- a/dom/xul/templates/nsRDFConInstanceTestNode.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsIComponentManager.h"
-#include "nsIRDFContainer.h"
-#include "nsIRDFContainerUtils.h"
-#include "nsIServiceManager.h"
-#include "nsRDFCID.h"
-#include "nsRDFConInstanceTestNode.h"
-#include "nsResourceSet.h"
-
-#include "mozilla/Logging.h"
-#include "nsXULContentUtils.h"
-
-using mozilla::LogLevel;
-
-extern mozilla::LazyLogModule gXULTemplateLog;
-
-static const char*
-TestToString(nsRDFConInstanceTestNode::Test aTest) {
-    switch (aTest) {
-    case nsRDFConInstanceTestNode::eFalse:    return "false";
-    case nsRDFConInstanceTestNode::eTrue:     return "true";
-    case nsRDFConInstanceTestNode::eDontCare: return "dontcare";
-    }
-    return "?";
-}
-
-nsRDFConInstanceTestNode::nsRDFConInstanceTestNode(TestNode* aParent,
-                                                   nsXULTemplateQueryProcessorRDF* aProcessor,
-                                                   nsAtom* aContainerVariable,
-                                                   Test aContainer,
-                                                   Test aEmpty)
-    : nsRDFTestNode(aParent),
-      mProcessor(aProcessor),
-      mContainerVariable(aContainerVariable),
-      mContainer(aContainer),
-      mEmpty(aEmpty)
-{
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        nsAutoCString props;
-
-        nsResourceSet& containmentProps = aProcessor->ContainmentProperties();
-        nsResourceSet::ConstIterator last = containmentProps.Last();
-        nsResourceSet::ConstIterator first = containmentProps.First();
-        nsResourceSet::ConstIterator iter;
-
-        for (iter = first; iter != last; ++iter) {
-            if (iter != first)
-                props += " ";
-
-            const char* str;
-            iter->GetValueConst(&str);
-
-            props += str;
-        }
-
-        nsAutoString cvar(NS_LITERAL_STRING("(none)"));
-        if (mContainerVariable)
-            mContainerVariable->ToString(cvar);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsRDFConInstanceTestNode[%p]: parent=%p member-props=(%s) container-var=%s container=%s empty=%s",
-                this,
-                aParent,
-                props.get(),
-                NS_ConvertUTF16toUTF8(cvar).get(),
-                TestToString(aContainer),
-                TestToString(aEmpty)));
-    }
-}
-
-nsresult
-nsRDFConInstanceTestNode::FilterInstantiations(InstantiationSet& aInstantiations,
-                                               bool* aCantHandleYet) const
-{
-    nsresult rv;
-
-    if (aCantHandleYet)
-        *aCantHandleYet = false;
-
-    nsCOMPtr<nsIRDFContainerUtils> rdfc
-        = do_GetService("@mozilla.org/rdf/container-utils;1");
-
-    if (! rdfc)
-        return NS_ERROR_FAILURE;
-
-    nsIRDFDataSource* ds = mProcessor->GetDataSource();
-
-    InstantiationSet::Iterator last = aInstantiations.Last();
-    for (InstantiationSet::Iterator inst = aInstantiations.First(); inst != last; ++inst) {
-        nsCOMPtr<nsIRDFNode> value;
-        if (! inst->mAssignments.GetAssignmentFor(mContainerVariable, getter_AddRefs(value))) {
-            NS_ERROR("can't do unbounded container testing");
-            return NS_ERROR_UNEXPECTED;
-        }
-
-        nsCOMPtr<nsIRDFResource> valueres = do_QueryInterface(value);
-        if (! valueres) {
-            aInstantiations.Erase(inst--);
-            continue;
-        }
-
-        if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-            const char* container = "(unbound)";
-            valueres->GetValueConst(&container);
-
-            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                   ("nsRDFConInstanceTestNode[%p]::FilterInstantiations() container=[%s]",
-                    this, container));
-        }
-
-        nsCOMPtr<nsIRDFContainer> rdfcontainer;
-
-        bool isRDFContainer;
-        rv = rdfc->IsContainer(ds, valueres, &isRDFContainer);
-        if (NS_FAILED(rv)) return rv;
-
-        if (mEmpty != eDontCare || mContainer != eDontCare) {
-            Test empty = eDontCare;
-            Test container = eDontCare;
-
-            if (isRDFContainer) {
-                // It's an RDF container. Use the container utilities
-                // to deduce what's in it.
-                container = eTrue;
-
-                // XXX should cache the factory
-                rdfcontainer = do_CreateInstance("@mozilla.org/rdf/container;1", &rv);
-                if (NS_FAILED(rv)) return rv;
-
-                rv = rdfcontainer->Init(ds, valueres);
-                if (NS_FAILED(rv)) return rv;
-
-                int32_t count;
-                rv = rdfcontainer->GetCount(&count);
-                if (NS_FAILED(rv)) return rv;
-
-                empty = (count == 0) ? eTrue : eFalse;
-            } else {
-                empty = eTrue;
-                container = eFalse;
-
-                // First do the simple check of finding some outward
-                // arcs; there should be only a few containment arcs, so this can
-                // save us time from dealing with an iterator later on
-                nsResourceSet& containmentProps = mProcessor->ContainmentProperties();
-                for (nsResourceSet::ConstIterator property = containmentProps.First();
-                     property != containmentProps.Last();
-                     ++property) {
-                    nsCOMPtr<nsIRDFNode> target;
-                    rv = ds->GetTarget(valueres, *property, true, getter_AddRefs(target));
-                    if (NS_FAILED(rv)) return rv;
-
-                    if (target != nullptr) {
-                        // bingo. we found one.
-                        empty = eFalse;
-                        container = eTrue;
-                        break;
-                    }
-                }
-
-                // if we still don't think its a container, but we
-                // want to know for sure whether it is or not, we need
-                // to check ArcLabelsOut for potential container arcs.
-                if (container == eFalse && mContainer != eDontCare) {
-                    nsCOMPtr<nsISimpleEnumerator> arcsout;
-                    rv = ds->ArcLabelsOut(valueres, getter_AddRefs(arcsout));
-                    if (NS_FAILED(rv)) return rv;
-
-                    while (1) {
-                        bool hasmore;
-                        rv = arcsout->HasMoreElements(&hasmore);
-                        if (NS_FAILED(rv)) return rv;
-
-                        if (! hasmore)
-                            break;
-
-                        nsCOMPtr<nsISupports> isupports;
-                        rv = arcsout->GetNext(getter_AddRefs(isupports));
-                        if (NS_FAILED(rv)) return rv;
-
-                        nsCOMPtr<nsIRDFResource> property = do_QueryInterface(isupports);
-                        NS_ASSERTION(property != nullptr, "not a property");
-                        if (! property)
-                            return NS_ERROR_UNEXPECTED;
-
-                        if (mProcessor->ContainmentProperties().Contains(property)) {
-                            container = eTrue;
-                            break;
-                        }
-                    }
-                }
-            }
-
-            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                   ("    empty => %s",
-                    (empty == mEmpty) ? "consistent" : "inconsistent"));
-
-            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                   ("    container => %s",
-                    (container == mContainer) ? "consistent" : "inconsistent"));
-
-            if (((mEmpty == empty) && (mContainer == container)) ||
-                ((mEmpty == eDontCare) && (mContainer == container)) ||
-                ((mContainer == eDontCare) && (mEmpty == empty)))
-            {
-                Element* element =
-                    new nsRDFConInstanceTestNode::Element(valueres, container, empty);
-                inst->AddSupportingElement(element);
-            }
-            else {
-                aInstantiations.Erase(inst--);
-            }
-        }
-    }
-
-    return NS_OK;
-}
-
-bool
-nsRDFConInstanceTestNode::CanPropagate(nsIRDFResource* aSource,
-                                       nsIRDFResource* aProperty,
-                                       nsIRDFNode* aTarget,
-                                       Instantiation& aInitialBindings) const
-{
-    nsresult rv;
-
-    bool canpropagate = false;
-
-    nsCOMPtr<nsIRDFContainerUtils> rdfc
-        = do_GetService("@mozilla.org/rdf/container-utils;1");
-
-    if (! rdfc)
-        return false;
-
-    // We can certainly propagate ordinal properties
-    rv = rdfc->IsOrdinalProperty(aProperty, &canpropagate);
-    if (NS_FAILED(rv)) return false;
-
-    if (! canpropagate) {
-        canpropagate = mProcessor->ContainmentProperties().Contains(aProperty);
-    }
-
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        const char* source;
-        aSource->GetValueConst(&source);
-
-        const char* property;
-        aProperty->GetValueConst(&property);
-
-        nsAutoString target;
-        nsXULContentUtils::GetTextForNode(aTarget, target);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsRDFConInstanceTestNode[%p]: CanPropagate([%s]==[%s]=>[%s]) => %s",
-                this, source, property, NS_ConvertUTF16toUTF8(target).get(),
-                canpropagate ? "true" : "false"));
-    }
-
-    if (canpropagate) {
-        aInitialBindings.AddAssignment(mContainerVariable, aSource);
-        return true;
-    }
-
-    return false;
-}
-
-void
-nsRDFConInstanceTestNode::Retract(nsIRDFResource* aSource,
-                                  nsIRDFResource* aProperty,
-                                  nsIRDFNode* aTarget) const
-{
-    // XXXwaterson oof. complicated. figure this out.
-    if (0) {
-        mProcessor->RetractElement(Element(aSource, mContainer, mEmpty));
-    }
-}
-
deleted file mode 100644
--- a/dom/xul/templates/nsRDFConInstanceTestNode.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsRDFConInstanceTestNode_h__
-#define nsRDFConInstanceTestNode_h__
-
-#include "mozilla/Attributes.h"
-#include "nscore.h"
-#include "nsRDFTestNode.h"
-#include "nsIRDFResource.h"
-#include "nsIRDFDataSource.h"
-#include "nsXULTemplateQueryProcessorRDF.h"
-
-/**
- * Rule network node that tests if a resource is an RDF container, or
- * uses multi-attributes to ``contain'' other elements.
- */
-class nsRDFConInstanceTestNode : public nsRDFTestNode
-{
-public:
-    enum Test { eFalse, eTrue, eDontCare };
-
-    nsRDFConInstanceTestNode(TestNode* aParent,
-                             nsXULTemplateQueryProcessorRDF* aProcessor,
-                             nsAtom* aContainerVariable,
-                             Test aContainer,
-                             Test aEmpty);
-
-    virtual nsresult FilterInstantiations(InstantiationSet& aInstantiations,
-                                          bool* aCantHandleYet) const override;
-
-    virtual bool
-    CanPropagate(nsIRDFResource* aSource,
-                 nsIRDFResource* aProperty,
-                 nsIRDFNode* aTarget,
-                 Instantiation& aInitialBindings) const override;
-
-    virtual void
-    Retract(nsIRDFResource* aSource,
-            nsIRDFResource* aProperty,
-            nsIRDFNode* aTarget) const override;
-
-
-    class Element : public MemoryElement {
-    public:
-        Element(nsIRDFResource* aContainer,
-                Test aContainerTest,
-                Test aEmptyTest)
-            : mContainer(aContainer),
-              mContainerTest(aContainerTest),
-              mEmptyTest(aEmptyTest) {
-            MOZ_COUNT_CTOR(nsRDFConInstanceTestNode::Element); }
-
-        virtual ~Element() { MOZ_COUNT_DTOR(nsRDFConInstanceTestNode::Element); }
-
-        virtual const char* Type() const override {
-            return "nsRDFConInstanceTestNode::Element"; }
-
-        virtual PLHashNumber Hash() const override {
-            return mozilla::HashGeneric(mContainerTest, mEmptyTest, mContainer.get());
-        }
-
-        virtual bool Equals(const MemoryElement& aElement) const override {
-            if (aElement.Type() == Type()) {
-                const Element& element = static_cast<const Element&>(aElement);
-                return mContainer == element.mContainer
-                    && mContainerTest == element.mContainerTest
-                    && mEmptyTest == element.mEmptyTest;
-            }
-            return false; }
-
-    protected:
-        nsCOMPtr<nsIRDFResource> mContainer;
-        Test mContainerTest;
-        Test mEmptyTest;
-    };
-
-protected:
-    nsXULTemplateQueryProcessorRDF* mProcessor;
-    RefPtr<nsAtom> mContainerVariable;
-    Test mContainer;
-    Test mEmpty;
-};
-
-#endif // nsRDFConInstanceTestNode_h__
-
deleted file mode 100644
--- a/dom/xul/templates/nsRDFConMemberTestNode.cpp
+++ /dev/null
@@ -1,510 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsRDFConMemberTestNode.h"
-#include "nsIRDFContainer.h"
-#include "nsIRDFContainerUtils.h"
-#include "nsRDFCID.h"
-#include "nsIServiceManager.h"
-#include "nsResourceSet.h"
-#include "nsString.h"
-#include "nsXULContentUtils.h"
-
-#include "mozilla/Logging.h"
-
-using mozilla::LogLevel;
-
-extern mozilla::LazyLogModule gXULTemplateLog;
-
-nsRDFConMemberTestNode::nsRDFConMemberTestNode(TestNode* aParent,
-                                               nsXULTemplateQueryProcessorRDF* aProcessor,
-                                               nsAtom *aContainerVariable,
-                                               nsAtom *aMemberVariable)
-    : nsRDFTestNode(aParent),
-      mProcessor(aProcessor),
-      mContainerVariable(aContainerVariable),
-      mMemberVariable(aMemberVariable)
-{
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        nsAutoCString props;
-
-        nsResourceSet& containmentProps = aProcessor->ContainmentProperties();
-        nsResourceSet::ConstIterator last = containmentProps.Last();
-        nsResourceSet::ConstIterator first = containmentProps.First();
-        nsResourceSet::ConstIterator iter;
-
-        for (iter = first; iter != last; ++iter) {
-            if (iter != first)
-                props += " ";
-
-            const char* str;
-            iter->GetValueConst(&str);
-
-            props += str;
-        }
-
-        nsAutoString cvar(NS_LITERAL_STRING("(none)"));
-        if (mContainerVariable)
-            mContainerVariable->ToString(cvar);
-
-        nsAutoString mvar(NS_LITERAL_STRING("(none)"));
-        if (mMemberVariable)
-            mMemberVariable->ToString(mvar);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsRDFConMemberTestNode[%p]: parent=%p member-props=(%s) container-var=%s member-var=%s",
-                this,
-                aParent,
-                props.get(),
-                NS_ConvertUTF16toUTF8(cvar).get(),
-                NS_ConvertUTF16toUTF8(mvar).get()));
-    }
-}
-
-nsresult
-nsRDFConMemberTestNode::FilterInstantiations(InstantiationSet& aInstantiations,
-                                             bool* aCantHandleYet) const
-{
-    // XXX Uh, factor me, please!
-    nsresult rv;
-
-    if (aCantHandleYet)
-        *aCantHandleYet = false;
-
-    nsCOMPtr<nsIRDFContainerUtils> rdfc =
-        do_GetService("@mozilla.org/rdf/container-utils;1");
-
-    if (! rdfc)
-        return NS_ERROR_FAILURE;
-
-    nsIRDFDataSource* ds = mProcessor->GetDataSource();
-
-    InstantiationSet::Iterator last = aInstantiations.Last();
-    for (InstantiationSet::Iterator inst = aInstantiations.First(); inst != last; ++inst) {
-        bool hasContainerBinding;
-        nsCOMPtr<nsIRDFNode> containerValue;
-        hasContainerBinding = inst->mAssignments.GetAssignmentFor(mContainerVariable,
-                                                                  getter_AddRefs(containerValue));
-
-        nsCOMPtr<nsIRDFResource> containerRes = do_QueryInterface(containerValue);
-
-        nsCOMPtr<nsIRDFContainer> rdfcontainer;
-
-        if (hasContainerBinding && containerRes) {
-            // If we have a container assignment, then see if the
-            // container is an RDF container (bag, seq, alt), and if
-            // so, wrap it.
-            bool isRDFContainer;
-            rv = rdfc->IsContainer(ds, containerRes, &isRDFContainer);
-            if (NS_FAILED(rv)) return rv;
-
-            if (isRDFContainer) {
-                rdfcontainer = do_CreateInstance("@mozilla.org/rdf/container;1", &rv);
-                if (NS_FAILED(rv)) return rv;
-
-                rv = rdfcontainer->Init(ds, containerRes);
-                if (NS_FAILED(rv)) return rv;
-            }
-        }
-
-        bool hasMemberBinding;
-        nsCOMPtr<nsIRDFNode> memberValue;
-        hasMemberBinding = inst->mAssignments.GetAssignmentFor(mMemberVariable,
-                                                               getter_AddRefs(memberValue));
-
-        if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-            const char* container = "(unbound)";
-            if (hasContainerBinding)
-                containerRes->GetValueConst(&container);
-
-            nsAutoString member(NS_LITERAL_STRING("(unbound)"));
-            if (hasMemberBinding)
-                nsXULContentUtils::GetTextForNode(memberValue, member);
-
-            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                   ("nsRDFConMemberTestNode[%p]: FilterInstantiations() container=[%s] member=[%s]",
-                    this, container, NS_ConvertUTF16toUTF8(member).get()));
-        }
-
-        if (hasContainerBinding && hasMemberBinding) {
-            // it's a consistency check. see if we have a assignment that is consistent
-            bool isconsistent = false;
-
-            if (rdfcontainer) {
-                // RDF containers are easy. Just use the container API.
-                int32_t index;
-                rv = rdfcontainer->IndexOf(memberValue, &index);
-                if (NS_FAILED(rv)) return rv;
-
-                if (index >= 0)
-                    isconsistent = true;
-            }
-
-            // XXXwaterson oof. if we *are* an RDF container, why do
-            // we still need to grovel through all the containment
-            // properties if the thing we're looking for wasn't there?
-
-            if (! isconsistent) {
-                // Othewise, we'll need to grovel through the
-                // membership properties to see if we have an
-                // assertion that indicates membership.
-                nsResourceSet& containmentProps = mProcessor->ContainmentProperties();
-                for (nsResourceSet::ConstIterator property = containmentProps.First();
-                     property != containmentProps.Last();
-                     ++property) {
-                    bool hasAssertion;
-                    rv = ds->HasAssertion(containerRes,
-                                          *property,
-                                          memberValue,
-                                          true,
-                                          &hasAssertion);
-                    if (NS_FAILED(rv)) return rv;
-
-                    if (hasAssertion) {
-                        // it's consistent. leave it in the set and we'll
-                        // run it up to our parent.
-                        isconsistent = true;
-                        break;
-                    }
-                }
-            }
-
-            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                   ("    consistency check => %s", isconsistent ? "passed" : "failed"));
-
-            if (isconsistent) {
-                // Add a memory element to our set-of-support.
-                Element* element =
-                    new nsRDFConMemberTestNode::Element(containerRes,
-                                                        memberValue);
-                inst->AddSupportingElement(element);
-            }
-            else {
-                // it's inconsistent. remove it.
-                aInstantiations.Erase(inst--);
-            }
-
-            // We're done, go on to the next instantiation
-            continue;
-        }
-
-        if (hasContainerBinding && rdfcontainer) {
-            // We've got a container assignment, and the container is
-            // bound to an RDF container. Add each member as a new
-            // instantiation.
-            nsCOMPtr<nsISimpleEnumerator> elements;
-            rv = rdfcontainer->GetElements(getter_AddRefs(elements));
-            if (NS_FAILED(rv)) return rv;
-
-            while (1) {
-                bool hasmore;
-                rv = elements->HasMoreElements(&hasmore);
-                if (NS_FAILED(rv)) return rv;
-
-                if (! hasmore)
-                    break;
-
-                nsCOMPtr<nsISupports> isupports;
-                rv = elements->GetNext(getter_AddRefs(isupports));
-                if (NS_FAILED(rv)) return rv;
-
-                nsCOMPtr<nsIRDFNode> node = do_QueryInterface(isupports);
-                if (! node)
-                    return NS_ERROR_UNEXPECTED;
-
-                if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-                    nsAutoString member;
-                    nsXULContentUtils::GetTextForNode(node, member);
-
-                    MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                           ("    member => %s", NS_ConvertUTF16toUTF8(member).get()));
-                }
-
-                Instantiation newinst = *inst;
-                newinst.AddAssignment(mMemberVariable, node);
-
-                Element* element =
-                    new nsRDFConMemberTestNode::Element(containerRes, node);
-                newinst.AddSupportingElement(element);
-                aInstantiations.Insert(inst, newinst);
-            }
-        }
-
-        if (hasMemberBinding) {
-            // Oh, this is so nasty. If we have a member assignment, then
-            // grovel through each one of our inbound arcs to see if
-            // any of them are ordinal properties (like an RDF
-            // container might have). If so, walk it backwards to get
-            // the container we're in.
-            nsCOMPtr<nsISimpleEnumerator> arcsin;
-            rv = ds->ArcLabelsIn(memberValue, getter_AddRefs(arcsin));
-            if (NS_FAILED(rv)) return rv;
-
-            while (1) {
-                nsCOMPtr<nsIRDFResource> property;
-
-                {
-                    bool hasmore;
-                    rv = arcsin->HasMoreElements(&hasmore);
-                    if (NS_FAILED(rv)) return rv;
-
-                    if (! hasmore)
-                        break;
-
-                    nsCOMPtr<nsISupports> isupports;
-                    rv = arcsin->GetNext(getter_AddRefs(isupports));
-                    if (NS_FAILED(rv)) return rv;
-
-                    property = do_QueryInterface(isupports);
-                    if (! property)
-                        return NS_ERROR_UNEXPECTED;
-                }
-
-                // Ordinal properties automagically indicate container
-                // membership as far as we're concerned. Note that
-                // we're *only* concerned with ordinal properties
-                // here: the next block will worry about the other
-                // membership properties.
-                bool isordinal;
-                rv = rdfc->IsOrdinalProperty(property, &isordinal);
-                if (NS_FAILED(rv)) return rv;
-
-                if (isordinal) {
-                    // If we get here, we've found a property that
-                    // indicates container membership leading *into* a
-                    // member node. Find all the people that point to
-                    // it, and call them containers.
-                    nsCOMPtr<nsISimpleEnumerator> sources;
-                    rv = ds->GetSources(property, memberValue, true,
-                                        getter_AddRefs(sources));
-                    if (NS_FAILED(rv)) return rv;
-
-                    while (1) {
-                        bool hasmore;
-                        rv = sources->HasMoreElements(&hasmore);
-                        if (NS_FAILED(rv)) return rv;
-
-                        if (! hasmore)
-                            break;
-
-                        nsCOMPtr<nsISupports> isupports;
-                        rv = sources->GetNext(getter_AddRefs(isupports));
-                        if (NS_FAILED(rv)) return rv;
-
-                        nsCOMPtr<nsIRDFResource> source = do_QueryInterface(isupports);
-                        if (! source)
-                            return NS_ERROR_UNEXPECTED;
-
-                        if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-                            const char* container;
-                            source->GetValueConst(&container);
-
-                            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                                   ("    container => %s", container));
-                        }
-
-                        // Add a new instantiation
-                        Instantiation newinst = *inst;
-                        newinst.AddAssignment(mContainerVariable, source);
-
-                        Element* element =
-                            new nsRDFConMemberTestNode::Element(source,
-                                                                memberValue);
-                        newinst.AddSupportingElement(element);
-
-                        aInstantiations.Insert(inst, newinst);
-                    }
-                }
-            }
-        }
-
-        if ((hasContainerBinding && ! hasMemberBinding) ||
-            (! hasContainerBinding && hasMemberBinding)) {
-            // it's an open ended query on the container or member. go
-            // through our containment properties to see if anything
-            // applies.
-            nsResourceSet& containmentProps = mProcessor->ContainmentProperties();
-            for (nsResourceSet::ConstIterator property = containmentProps.First();
-                 property != containmentProps.Last();
-                 ++property) {
-                nsCOMPtr<nsISimpleEnumerator> results;
-                if (hasContainerBinding) {
-                    rv = ds->GetTargets(containerRes, *property, true,
-                                        getter_AddRefs(results));
-                }
-                else {
-                    rv = ds->GetSources(*property, memberValue, true,
-                                        getter_AddRefs(results));
-                }
-                if (NS_FAILED(rv)) return rv;
-
-                while (1) {
-                    bool hasmore;
-                    rv = results->HasMoreElements(&hasmore);
-                    if (NS_FAILED(rv)) return rv;
-
-                    if (! hasmore)
-                        break;
-
-                    nsCOMPtr<nsISupports> isupports;
-                    rv = results->GetNext(getter_AddRefs(isupports));
-                    if (NS_FAILED(rv)) return rv;
-
-                    nsAtom* variable;
-                    nsCOMPtr<nsIRDFNode> value;
-                    nsCOMPtr<nsIRDFResource> valueRes;
-
-                    if (hasContainerBinding) {
-                        variable = mMemberVariable;
-
-                        value = do_QueryInterface(isupports);
-                        NS_ASSERTION(value != nullptr, "member is not an nsIRDFNode");
-                        if (! value) continue;
-
-                        if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-                            nsAutoString s;
-                            nsXULContentUtils::GetTextForNode(value, s);
-
-                            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                                   ("    member => %s", NS_ConvertUTF16toUTF8(s).get()));
-                        }
-                    }
-                    else {
-                        variable = mContainerVariable;
-
-                        valueRes = do_QueryInterface(isupports);
-                        NS_ASSERTION(valueRes != nullptr, "container is not an nsIRDFResource");
-                        if (! valueRes) continue;
-
-                        value = valueRes;
-
-                        if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-                            const char* s;
-                            valueRes->GetValueConst(&s);
-
-                            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                                   ("    container => %s", s));
-                        }
-                    }
-
-                    // Copy the original instantiation, and add it to the
-                    // instantiation set with the new assignment that we've
-                    // introduced. Ownership will be transferred to the
-                    Instantiation newinst = *inst;
-                    newinst.AddAssignment(variable, value);
-
-                    Element* element;
-                    if (hasContainerBinding) {
-                        element =
-                            new nsRDFConMemberTestNode::Element(containerRes, value);
-                    }
-                    else {
-                        element =
-                            new nsRDFConMemberTestNode::Element(valueRes, memberValue);
-                    }
-
-                    if (! element)
-                        return NS_ERROR_OUT_OF_MEMORY;
-
-                    newinst.AddSupportingElement(element);
-
-                    aInstantiations.Insert(inst, newinst);
-                }
-            }
-        }
-
-        if (! hasContainerBinding && ! hasMemberBinding) {
-            // Neither container nor member assignment!
-            if (!aCantHandleYet) {
-                nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_MEMBER_UNBOUND);
-                return NS_ERROR_UNEXPECTED;
-            }
-
-            *aCantHandleYet = true;
-            return NS_OK;
-        }
-
-        // finally, remove the "under specified" instantiation.
-        aInstantiations.Erase(inst--);
-    }
-
-    return NS_OK;
-}
-
-bool
-nsRDFConMemberTestNode::CanPropagate(nsIRDFResource* aSource,
-                                     nsIRDFResource* aProperty,
-                                     nsIRDFNode* aTarget,
-                                     Instantiation& aInitialBindings) const
-{
-    nsresult rv;
-
-    bool canpropagate = false;
-
-    nsCOMPtr<nsIRDFContainerUtils> rdfc =
-        do_GetService("@mozilla.org/rdf/container-utils;1");
-
-    if (! rdfc)
-        return false;
-
-    // We can certainly propagate ordinal properties
-    rv = rdfc->IsOrdinalProperty(aProperty, &canpropagate);
-    if (NS_FAILED(rv)) return false;
-
-    if (! canpropagate) {
-        canpropagate = mProcessor->ContainmentProperties().Contains(aProperty);
-    }
-
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        const char* source;
-        aSource->GetValueConst(&source);
-
-        const char* property;
-        aProperty->GetValueConst(&property);
-
-        nsAutoString target;
-        nsXULContentUtils::GetTextForNode(aTarget, target);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsRDFConMemberTestNode[%p]: CanPropagate([%s]==[%s]=>[%s]) => %s",
-                this, source, property, NS_ConvertUTF16toUTF8(target).get(),
-                canpropagate ? "true" : "false"));
-    }
-
-    if (canpropagate) {
-        aInitialBindings.AddAssignment(mContainerVariable, aSource);
-        aInitialBindings.AddAssignment(mMemberVariable, aTarget);
-        return true;
-    }
-
-    return false;
-}
-
-void
-nsRDFConMemberTestNode::Retract(nsIRDFResource* aSource,
-                                nsIRDFResource* aProperty,
-                                nsIRDFNode* aTarget) const
-{
-    bool canretract = false;
-
-    nsCOMPtr<nsIRDFContainerUtils> rdfc =
-        do_GetService("@mozilla.org/rdf/container-utils;1");
-
-    if (! rdfc)
-        return;
-
-    // We can certainly retract ordinal properties
-    nsresult rv;
-    rv = rdfc->IsOrdinalProperty(aProperty, &canretract);
-    if (NS_FAILED(rv)) return;
-
-    if (! canretract) {
-        canretract = mProcessor->ContainmentProperties().Contains(aProperty);
-    }
-
-    if (canretract) {
-        mProcessor->RetractElement(Element(aSource, aTarget));
-    }
-}
deleted file mode 100644
--- a/dom/xul/templates/nsRDFConMemberTestNode.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsRDFConMemberTestNode_h__
-#define nsRDFConMemberTestNode_h__
-
-#include "mozilla/Attributes.h"
-#include "nscore.h"
-#include "nsRDFTestNode.h"
-#include "nsIRDFDataSource.h"
-#include "nsXULTemplateQueryProcessorRDF.h"
-
-/**
- * Rule network node that test if a resource is a member of an RDF
- * container, or is ``contained'' by another resource that refers to
- * it using a ``containment'' attribute.
- */
-class nsRDFConMemberTestNode : public nsRDFTestNode
-{
-public:
-    nsRDFConMemberTestNode(TestNode* aParent,
-                           nsXULTemplateQueryProcessorRDF* aProcessor,
-                           nsAtom* aContainerVariable,
-                           nsAtom* aMemberVariable);
-
-    virtual nsresult FilterInstantiations(InstantiationSet& aInstantiations,
-                                          bool* aCantHandleYet) const override;
-
-    virtual bool
-    CanPropagate(nsIRDFResource* aSource,
-                 nsIRDFResource* aProperty,
-                 nsIRDFNode* aTarget,
-                 Instantiation& aInitialBindings) const override;
-
-    virtual void
-    Retract(nsIRDFResource* aSource,
-            nsIRDFResource* aProperty,
-            nsIRDFNode* aTarget) const override;
-
-    class Element : public MemoryElement {
-    public:
-        Element(nsIRDFResource* aContainer,
-                nsIRDFNode* aMember)
-            : mContainer(aContainer),
-              mMember(aMember) {
-            MOZ_COUNT_CTOR(nsRDFConMemberTestNode::Element); }
-
-        virtual ~Element() { MOZ_COUNT_DTOR(nsRDFConMemberTestNode::Element); }
-
-        virtual const char* Type() const override {
-            return "nsRDFConMemberTestNode::Element"; }
-
-        virtual PLHashNumber Hash() const override {
-            return PLHashNumber(NS_PTR_TO_INT32(mContainer.get())) ^
-                (PLHashNumber(NS_PTR_TO_INT32(mMember.get())) >> 12); }
-
-        virtual bool Equals(const MemoryElement& aElement) const override {
-            if (aElement.Type() == Type()) {
-                const Element& element = static_cast<const Element&>(aElement);
-                return mContainer == element.mContainer && mMember == element.mMember;
-            }
-            return false; }
-
-    protected:
-        nsCOMPtr<nsIRDFResource> mContainer;
-        nsCOMPtr<nsIRDFNode> mMember;
-    };
-
-protected:
-    nsXULTemplateQueryProcessorRDF* mProcessor;
-    RefPtr<nsAtom> mContainerVariable;
-    RefPtr<nsAtom> mMemberVariable;
-};
-
-#endif // nsRDFConMemberTestNode_h__
deleted file mode 100644
--- a/dom/xul/templates/nsRDFPropertyTestNode.cpp
+++ /dev/null
@@ -1,362 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsRDFPropertyTestNode.h"
-#include "nsString.h"
-#include "nsXULContentUtils.h"
-
-#include "mozilla/Logging.h"
-
-using mozilla::LogLevel;
-
-extern mozilla::LazyLogModule gXULTemplateLog;
-#include "nsIRDFLiteral.h"
-
-nsRDFPropertyTestNode::nsRDFPropertyTestNode(TestNode* aParent,
-                                             nsXULTemplateQueryProcessorRDF* aProcessor,
-                                             nsAtom* aSourceVariable,
-                                             nsIRDFResource* aProperty,
-                                             nsAtom* aTargetVariable)
-    : nsRDFTestNode(aParent),
-      mProcessor(aProcessor),
-      mSourceVariable(aSourceVariable),
-      mSource(nullptr),
-      mProperty(aProperty),
-      mTargetVariable(aTargetVariable),
-      mTarget(nullptr)
-{
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        const char* prop = "(null)";
-        if (aProperty)
-            aProperty->GetValueConst(&prop);
-
-        nsAutoString svar(NS_LITERAL_STRING("(none)"));
-        if (mSourceVariable)
-            mSourceVariable->ToString(svar);
-
-        nsAutoString tvar(NS_LITERAL_STRING("(none)"));
-        if (mTargetVariable)
-            mTargetVariable->ToString(tvar);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsRDFPropertyTestNode[%p]: parent=%p source=%s property=%s target=%s",
-                this, aParent, NS_ConvertUTF16toUTF8(svar).get(), prop, NS_ConvertUTF16toUTF8(tvar).get()));
-    }
-}
-
-
-nsRDFPropertyTestNode::nsRDFPropertyTestNode(TestNode* aParent,
-                                             nsXULTemplateQueryProcessorRDF* aProcessor,
-                                             nsIRDFResource* aSource,
-                                             nsIRDFResource* aProperty,
-                                             nsAtom* aTargetVariable)
-    : nsRDFTestNode(aParent),
-      mProcessor(aProcessor),
-      mSourceVariable(nullptr),
-      mSource(aSource),
-      mProperty(aProperty),
-      mTargetVariable(aTargetVariable),
-      mTarget(nullptr)
-{
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        const char* source = "(null)";
-        if (aSource)
-            aSource->GetValueConst(&source);
-
-        const char* prop = "(null)";
-        if (aProperty)
-            aProperty->GetValueConst(&prop);
-
-        nsAutoString tvar(NS_LITERAL_STRING("(none)"));
-        if (mTargetVariable)
-            mTargetVariable->ToString(tvar);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsRDFPropertyTestNode[%p]: parent=%p source=%s property=%s target=%s",
-                this, aParent, source, prop, NS_ConvertUTF16toUTF8(tvar).get()));
-    }
-}
-
-
-nsRDFPropertyTestNode::nsRDFPropertyTestNode(TestNode* aParent,
-                                             nsXULTemplateQueryProcessorRDF* aProcessor,
-                                             nsAtom* aSourceVariable,
-                                             nsIRDFResource* aProperty,
-                                             nsIRDFNode* aTarget)
-    : nsRDFTestNode(aParent),
-      mProcessor(aProcessor),
-      mSourceVariable(aSourceVariable),
-      mSource(nullptr),
-      mProperty(aProperty),
-      mTargetVariable(nullptr),
-      mTarget(aTarget)
-{
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        nsAutoString svar(NS_LITERAL_STRING("(none)"));
-        if (mSourceVariable)
-            mSourceVariable->ToString(svar);
-
-        const char* prop = "(null)";
-        if (aProperty)
-            aProperty->GetValueConst(&prop);
-
-        nsAutoString target;
-        nsXULContentUtils::GetTextForNode(aTarget, target);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsRDFPropertyTestNode[%p]: parent=%p source=%s property=%s target=%s",
-                this, aParent, NS_ConvertUTF16toUTF8(svar).get(), prop, NS_ConvertUTF16toUTF8(target).get()));
-    }
-}
-
-
-nsresult
-nsRDFPropertyTestNode::FilterInstantiations(InstantiationSet& aInstantiations,
-                                            bool* aCantHandleYet) const
-{
-    nsresult rv;
-
-    if (aCantHandleYet)
-        *aCantHandleYet = false;
-
-    nsIRDFDataSource* ds = mProcessor->GetDataSource();
-
-    InstantiationSet::Iterator last = aInstantiations.Last();
-    for (InstantiationSet::Iterator inst = aInstantiations.First(); inst != last; ++inst) {
-        bool hasSourceBinding;
-        nsCOMPtr<nsIRDFResource> sourceRes;
-
-        if (mSource) {
-            hasSourceBinding = true;
-            sourceRes = mSource;
-        }
-        else {
-            nsCOMPtr<nsIRDFNode> sourceValue;
-            hasSourceBinding = inst->mAssignments.GetAssignmentFor(mSourceVariable,
-                                                                   getter_AddRefs(sourceValue));
-            sourceRes = do_QueryInterface(sourceValue);
-        }
-
-        bool hasTargetBinding;
-        nsCOMPtr<nsIRDFNode> targetValue;
-
-        if (mTarget) {
-            hasTargetBinding = true;
-            targetValue = mTarget;
-        }
-        else {
-            hasTargetBinding = inst->mAssignments.GetAssignmentFor(mTargetVariable,
-                                                                   getter_AddRefs(targetValue));
-        }
-
-        if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-            const char* source = "(unbound)";
-            if (hasSourceBinding)
-                sourceRes->GetValueConst(&source);
-
-            nsAutoString target(NS_LITERAL_STRING("(unbound)"));
-            if (hasTargetBinding)
-                nsXULContentUtils::GetTextForNode(targetValue, target);
-
-            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                   ("nsRDFPropertyTestNode[%p]: FilterInstantiations() source=[%s] target=[%s]",
-                    this, source, NS_ConvertUTF16toUTF8(target).get()));
-        }
-
-        if (hasSourceBinding && hasTargetBinding) {
-            // it's a consistency check. see if we have a assignment that is consistent
-            bool hasAssertion;
-            rv = ds->HasAssertion(sourceRes, mProperty, targetValue,
-                                  true, &hasAssertion);
-            if (NS_FAILED(rv)) return rv;
-
-            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                   ("    consistency check => %s", hasAssertion ? "passed" : "failed"));
-
-            if (hasAssertion) {
-                // it's consistent.
-                Element* element =
-                    new nsRDFPropertyTestNode::Element(sourceRes, mProperty,
-                                                       targetValue);
-                inst->AddSupportingElement(element);
-            }
-            else {
-                // it's inconsistent. remove it.
-                aInstantiations.Erase(inst--);
-            }
-        }
-        else if ((hasSourceBinding && ! hasTargetBinding) ||
-                 (! hasSourceBinding && hasTargetBinding)) {
-            // it's an open ended query on the source or
-            // target. figure out what matches and add as a
-            // cross-product.
-            nsCOMPtr<nsISimpleEnumerator> results;
-            if (hasSourceBinding) {
-                rv = ds->GetTargets(sourceRes,
-                                    mProperty,
-                                    true,
-                                    getter_AddRefs(results));
-            }
-            else {
-                rv = ds->GetSources(mProperty,
-                                    targetValue,
-                                    true,
-                                    getter_AddRefs(results));
-                if (NS_FAILED(rv)) return rv;
-            }
-
-            while (1) {
-                bool hasMore;
-                rv = results->HasMoreElements(&hasMore);
-                if (NS_FAILED(rv)) return rv;
-
-                if (! hasMore)
-                    break;
-
-                nsCOMPtr<nsISupports> isupports;
-                rv = results->GetNext(getter_AddRefs(isupports));
-                if (NS_FAILED(rv)) return rv;
-
-                nsAtom* variable;
-                nsCOMPtr<nsIRDFNode> value;
-
-                if (hasSourceBinding) {
-                    variable = mTargetVariable;
-
-                    value = do_QueryInterface(isupports);
-                    NS_ASSERTION(value != nullptr, "target is not an nsIRDFNode");
-
-                    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-                        nsAutoString s(NS_LITERAL_STRING("(none found)"));
-                        if (value)
-                            nsXULContentUtils::GetTextForNode(value, s);
-
-                        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                               ("    target => %s", NS_ConvertUTF16toUTF8(s).get()));
-                    }
-
-                    if (! value) continue;
-
-                    targetValue = value;
-                }
-                else {
-                    variable = mSourceVariable;
-
-                    nsCOMPtr<nsIRDFResource> source = do_QueryInterface(isupports);
-                    NS_ASSERTION(source != nullptr, "source is not an nsIRDFResource");
-
-                    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-                        const char* s = "(none found)";
-                        if (source)
-                            source->GetValueConst(&s);
-
-                        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                               ("    source => %s", s));
-                    }
-
-                    if (! source) continue;
-
-                    value = sourceRes = source;
-                }
-
-                // Copy the original instantiation, and add it to the
-                // instantiation set with the new assignment that we've
-                // introduced. Ownership will be transferred to the
-                Instantiation newinst = *inst;
-                newinst.AddAssignment(variable, value);
-
-                Element* element =
-                    new nsRDFPropertyTestNode::Element(sourceRes, mProperty,
-                                                       targetValue);
-                newinst.AddSupportingElement(element);
-
-                aInstantiations.Insert(inst, newinst);
-            }
-
-            // finally, remove the "under specified" instantiation.
-            aInstantiations.Erase(inst--);
-        }
-        else {
-            if (!aCantHandleYet) {
-                nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_TRIPLE_UNBOUND);
-                // Neither source nor target assignment!
-                return NS_ERROR_UNEXPECTED;
-            }
-
-            *aCantHandleYet = true;
-            return NS_OK;
-        }
-    }
-
-    return NS_OK;
-}
-
-bool
-nsRDFPropertyTestNode::CanPropagate(nsIRDFResource* aSource,
-                                    nsIRDFResource* aProperty,
-                                    nsIRDFNode* aTarget,
-                                    Instantiation& aInitialBindings) const
-{
-    bool result;
-
-    if ((mProperty.get() != aProperty) ||
-        (mSource && mSource.get() != aSource) ||
-        (mTarget && mTarget.get() != aTarget)) {
-        result = false;
-    }
-    else {
-        if (mSourceVariable)
-            aInitialBindings.AddAssignment(mSourceVariable, aSource);
-
-        if (mTargetVariable)
-            aInitialBindings.AddAssignment(mTargetVariable, aTarget);
-
-        result = true;
-    }
-
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        const char* source;
-        aSource->GetValueConst(&source);
-
-        const char* property;
-        aProperty->GetValueConst(&property);
-
-        nsAutoString target;
-        nsXULContentUtils::GetTextForNode(aTarget, target);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsRDFPropertyTestNode[%p]: CanPropagate([%s]==[%s]=>[%s]) => %s",
-                this, source, property, NS_ConvertUTF16toUTF8(target).get(),
-                result ? "true" : "false"));
-    }
-
-    return result;
-}
-
-void
-nsRDFPropertyTestNode::Retract(nsIRDFResource* aSource,
-                               nsIRDFResource* aProperty,
-                               nsIRDFNode* aTarget) const
-{
-    if (aProperty == mProperty.get()) {
-        if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-            const char* source;
-            aSource->GetValueConst(&source);
-
-            const char* property;
-            aProperty->GetValueConst(&property);
-
-            nsAutoString target;
-            nsXULContentUtils::GetTextForNode(aTarget, target);
-
-            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                   ("nsRDFPropertyTestNode[%p]: Retract([%s]==[%s]=>[%s])",
-                    this, source, property, NS_ConvertUTF16toUTF8(target).get()));
-        }
-
-        mProcessor->RetractElement(Element(aSource, aProperty, aTarget));
-    }
-}
-
deleted file mode 100644
--- a/dom/xul/templates/nsRDFPropertyTestNode.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsRDFPropertyTestNode_h__
-#define nsRDFPropertyTestNode_h__
-
-#include "mozilla/Attributes.h"
-#include "nscore.h"
-#include "nsRDFTestNode.h"
-#include "nsIRDFDataSource.h"
-#include "nsIRDFResource.h"
-#include "nsXULTemplateQueryProcessorRDF.h"
-
-class nsRDFPropertyTestNode : public nsRDFTestNode
-{
-public:
-    /**
-     * Both source and target unbound (?source ^property ?target)
-     */
-    nsRDFPropertyTestNode(TestNode* aParent,
-                          nsXULTemplateQueryProcessorRDF* aProcessor,
-                          nsAtom* aSourceVariable,
-                          nsIRDFResource* aProperty,
-                          nsAtom* aTargetVariable);
-
-    /**
-     * Source bound, target unbound (source ^property ?target)
-     */
-    nsRDFPropertyTestNode(TestNode* aParent,
-                          nsXULTemplateQueryProcessorRDF* aProcessor,
-                          nsIRDFResource* aSource,
-                          nsIRDFResource* aProperty,
-                          nsAtom* aTargetVariable);
-
-    /**
-     * Source unbound, target bound (?source ^property target)
-     */
-    nsRDFPropertyTestNode(TestNode* aParent,
-                          nsXULTemplateQueryProcessorRDF* aProcessor,
-                          nsAtom* aSourceVariable,
-                          nsIRDFResource* aProperty,
-                          nsIRDFNode* aTarget);
-
-    virtual nsresult FilterInstantiations(InstantiationSet& aInstantiations,
-                                          bool* aCantHandleYet) const override;
-
-    virtual bool
-    CanPropagate(nsIRDFResource* aSource,
-                 nsIRDFResource* aProperty,
-                 nsIRDFNode* aTarget,
-                 Instantiation& aInitialBindings) const override;
-
-    virtual void
-    Retract(nsIRDFResource* aSource,
-            nsIRDFResource* aProperty,
-            nsIRDFNode* aTarget) const override;
-
-
-    class Element : public MemoryElement {
-    public:
-        Element(nsIRDFResource* aSource,
-                nsIRDFResource* aProperty,
-                nsIRDFNode* aTarget)
-            : mSource(aSource),
-              mProperty(aProperty),
-              mTarget(aTarget) {
-            MOZ_COUNT_CTOR(nsRDFPropertyTestNode::Element); }
-
-        virtual ~Element() { MOZ_COUNT_DTOR(nsRDFPropertyTestNode::Element); }
-
-        virtual const char* Type() const override {
-            return "nsRDFPropertyTestNode::Element"; }
-
-        virtual PLHashNumber Hash() const override {
-            return mozilla::HashGeneric(mSource.get(), mProperty.get(), mTarget.get());
-        }
-
-        virtual bool Equals(const MemoryElement& aElement) const override {
-            if (aElement.Type() == Type()) {
-                const Element& element = static_cast<const Element&>(aElement);
-                return mSource == element.mSource
-                    && mProperty == element.mProperty
-                    && mTarget == element.mTarget;
-            }
-            return false; }
-
-    protected:
-        nsCOMPtr<nsIRDFResource> mSource;
-        nsCOMPtr<nsIRDFResource> mProperty;
-        nsCOMPtr<nsIRDFNode> mTarget;
-    };
-
-protected:
-    nsXULTemplateQueryProcessorRDF* mProcessor;
-    RefPtr<nsAtom>        mSourceVariable;
-    nsCOMPtr<nsIRDFResource> mSource;
-    nsCOMPtr<nsIRDFResource> mProperty;
-    RefPtr<nsAtom>        mTargetVariable;
-    nsCOMPtr<nsIRDFNode>     mTarget;
-};
-
-#endif // nsRDFPropertyTestNode_h__
deleted file mode 100644
--- a/dom/xul/templates/nsRDFQuery.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nscore.h"
-#include "nsCOMPtr.h"
-
-#include "nsXULTemplateQueryProcessorRDF.h"
-#include "nsRDFQuery.h"
-
-NS_IMPL_CYCLE_COLLECTION(nsRDFQuery, mQueryNode)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsRDFQuery)
-  NS_INTERFACE_MAP_ENTRY(nsITemplateRDFQuery)
-  NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(nsRDFQuery)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(nsRDFQuery)
-
-void
-nsRDFQuery::Finish()
-{
-    // the template builder is going away and the query processor likely as
-    // well. Clear the reference to avoid calling it.
-    mProcessor = nullptr;
-    mCachedResults = nullptr;
-}
-
-nsresult
-nsRDFQuery::SetCachedResults(nsXULTemplateQueryProcessorRDF* aProcessor,
-                             const InstantiationSet& aInstantiations)
-{
-    mCachedResults = new nsXULTemplateResultSetRDF(aProcessor, this, &aInstantiations);
-    return NS_OK;
-}
-
-
-void
-nsRDFQuery::UseCachedResults(nsISimpleEnumerator** aResults)
-{
-    *aResults = mCachedResults;
-    NS_IF_ADDREF(*aResults);
-
-    mCachedResults = nullptr;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsRDFQuery.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsRDFQuery_h__
-#define nsRDFQuery_h__
-
-#include "nsISimpleEnumerator.h"
-#include "nsCycleCollectionParticipant.h"
-#include "mozilla/Attributes.h"
-
-#define NS_ITEMPLATERDFQUERY_IID \
-  {0x8929ff60, 0x1c9c, 0x4d87, \
-    { 0xac, 0x02, 0x09, 0x14, 0x15, 0x3b, 0x48, 0xc4 }}
-
-class nsXULTemplateQueryProcessorRDF;
-
-/**
- * A compiled query in the RDF query processor. This interface should not be
- * used directly outside of the RDF query processor.
- */
-class nsITemplateRDFQuery : public nsISupports
-{
-public:
-    NS_DECLARE_STATIC_IID_ACCESSOR(NS_ITEMPLATERDFQUERY_IID)
-
-    // return the processor the query was created from
-    virtual nsXULTemplateQueryProcessorRDF* Processor() = 0;  // not addrefed
-
-    // return the member variable for the query
-    virtual nsAtom* GetMemberVariable() = 0; // not addrefed
-
-    // return the <query> node the query was compiled from
-    virtual void GetQueryNode(nsIDOMNode** aQueryNode) = 0;
-
-    // remove any results that are cached by the query
-    virtual void ClearCachedResults() = 0;
-};
-
-class nsRDFQuery final : public nsITemplateRDFQuery
-{
-    ~nsRDFQuery() { Finish(); }
-
-public:
-
-    explicit nsRDFQuery(nsXULTemplateQueryProcessorRDF* aProcessor)
-      : mProcessor(aProcessor),
-        mSimple(false),
-        mRoot(nullptr),
-        mCachedResults(nullptr)
-    { }
-
-    NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-    NS_DECL_CYCLE_COLLECTION_CLASS(nsRDFQuery)
-
-    /**
-     * Retrieve the root node in the rule network
-     * @return the root node in the rule network
-     */
-    TestNode* GetRoot() { return mRoot; }
-
-    void SetRoot(TestNode* aRoot) { mRoot = aRoot; }
-
-    void GetQueryNode(nsIDOMNode** aQueryNode) override
-    {
-       *aQueryNode = mQueryNode;
-       NS_IF_ADDREF(*aQueryNode);
-    }
-
-    void SetQueryNode(nsIDOMNode* aQueryNode)
-    {
-       mQueryNode = aQueryNode;
-    }
-
-    // an optimization is used when several queries all use the simple query
-    // syntax. Since simple queries can only generate one possible set of
-    // results, they only need to be calculated once and reused for every
-    // simple query. The results may be cached in the query for this purpose.
-    // If successful, this method takes ownership of aInstantiations.
-    nsresult SetCachedResults(nsXULTemplateQueryProcessorRDF* aProcessor,
-                              const InstantiationSet& aInstantiations);
-
-    // grab the cached results, if any, causing the caller to take ownership
-    // of them. This also has the effect of setting the cached results in this
-    // nsRDFQuery to null.
-    void UseCachedResults(nsISimpleEnumerator** aResults);
-
-    // clear the cached results
-    void ClearCachedResults() override
-    {
-        mCachedResults = nullptr;
-    }
-
-    nsXULTemplateQueryProcessorRDF* Processor() override { return mProcessor; }
-
-    nsAtom* GetMemberVariable() override { return mMemberVariable; }
-
-    bool IsSimple() { return mSimple; }
-
-    void SetSimple() { mSimple = true; }
-
-    // the reference and member variables for the query
-    RefPtr<nsAtom> mRefVariable;
-    RefPtr<nsAtom> mMemberVariable;
-
-protected:
-
-    nsXULTemplateQueryProcessorRDF* mProcessor;
-
-    // true if the query is a simple rule (one with a default query)
-    bool mSimple;
-
-    /**
-     * The root node in the network for this query
-     */
-    TestNode *mRoot;
-
-    // the <query> node
-    nsCOMPtr<nsIDOMNode> mQueryNode;
-
-    // used for simple rules since their results are all determined in one step
-    nsCOMPtr<nsISimpleEnumerator> mCachedResults;
-
-    void Finish();
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsITemplateRDFQuery, NS_ITEMPLATERDFQUERY_IID)
-
-#endif // nsRDFQuery_h__
deleted file mode 100644
--- a/dom/xul/templates/nsRDFTestNode.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsRDFTestNode_h__
-#define nsRDFTestNode_h__
-
-#include "nsRuleNetwork.h"
-
-class nsIRDFResource;
-class nsIRDFNode;
-
-/**
- * An abstract base class for all of the RDF-related tests. This interface
- * allows us to iterate over all of the RDF tests to find the one in the
- * network that is apropos for a newly-added assertion.
- */
-class nsRDFTestNode : public TestNode
-{
-public:
-    explicit nsRDFTestNode(TestNode* aParent)
-        : TestNode(aParent) {}
-
-    /**
-     * Determine whether the node can propagate an assertion
-     * with the specified source, property, and target. If the
-     * assertion can be propagated, aInitialBindings will be
-     * initialized with appropriate variable-to-value assignments
-     * to allow the rule network to start a constrain and propagate
-     * search from this node in the network.
-     *
-     * @return true if the node can propagate the specified
-     * assertion.
-     */
-    virtual bool CanPropagate(nsIRDFResource* aSource,
-                                nsIRDFResource* aProperty,
-                                nsIRDFNode* aTarget,
-                                Instantiation& aInitialBindings) const = 0;
-
-    /**
-     *
-     */
-    virtual void Retract(nsIRDFResource* aSource,
-                         nsIRDFResource* aProperty,
-                         nsIRDFNode* aTarget) const = 0;
-};
-
-#endif // nsRDFTestNode_h__
deleted file mode 100644
--- a/dom/xul/templates/nsResourceSet.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsResourceSet.h"
-
-nsResourceSet::nsResourceSet(const nsResourceSet& aResourceSet)
-    : mResources(nullptr),
-      mCount(0),
-      mCapacity(0)
-{
-    ConstIterator last = aResourceSet.Last();
-    for (ConstIterator resource = aResourceSet.First(); resource != last; ++resource)
-        Add(*resource);
-}
-
-
-nsResourceSet&
-nsResourceSet::operator=(const nsResourceSet& aResourceSet)
-{
-    Clear();
-    ConstIterator last = aResourceSet.Last();
-    for (ConstIterator resource = aResourceSet.First(); resource != last; ++resource)
-        Add(*resource);
-    return *this;
-}
-
-nsResourceSet::~nsResourceSet()
-{
-    MOZ_COUNT_DTOR(nsResourceSet);
-    Clear();
-    delete[] mResources;
-}
-
-nsresult
-nsResourceSet::Clear()
-{
-    while (--mCount >= 0) {
-        NS_RELEASE(mResources[mCount]);
-    }
-    mCount = 0;
-    return NS_OK;
-}
-
-nsresult
-nsResourceSet::Add(nsIRDFResource* aResource)
-{
-    NS_PRECONDITION(aResource != nullptr, "null ptr");
-    if (! aResource)
-        return NS_ERROR_NULL_POINTER;
-
-    if (Contains(aResource))
-        return NS_OK;
-
-    if (mCount >= mCapacity) {
-        int32_t capacity = mCapacity + 4;
-        nsIRDFResource** resources = new nsIRDFResource*[capacity];
-        for (int32_t i = mCount - 1; i >= 0; --i)
-            resources[i] = mResources[i];
-
-        delete[] mResources;
-
-        mResources = resources;
-        mCapacity = capacity;
-    }
-
-    mResources[mCount++] = aResource;
-    NS_ADDREF(aResource);
-    return NS_OK;
-}
-
-void
-nsResourceSet::Remove(nsIRDFResource* aProperty)
-{
-    bool found = false;
-
-    nsIRDFResource** res = mResources;
-    nsIRDFResource** limit = mResources + mCount;
-    while (res < limit) {
-        if (found) {
-            *(res - 1) = *res;
-        }
-        else if (*res == aProperty) {
-            NS_RELEASE(*res);
-            found = true;
-        }
-        ++res;
-    }
-
-    if (found)
-        --mCount;
-}
-
-bool
-nsResourceSet::Contains(nsIRDFResource* aResource) const
-{
-    for (int32_t i = mCount - 1; i >= 0; --i) {
-        if (mResources[i] == aResource)
-            return true;
-    }
-
-    return false;
-}
-
deleted file mode 100644
--- a/dom/xul/templates/nsResourceSet.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-#ifndef nsResourceSet_h__
-#define nsResourceSet_h__
-
-#include "nsIRDFResource.h"
-
-class nsResourceSet
-{
-public:
-    nsResourceSet()
-        : mResources(nullptr),
-          mCount(0),
-          mCapacity(0) {
-        MOZ_COUNT_CTOR(nsResourceSet); }
-
-    nsResourceSet(const nsResourceSet& aResourceSet);
-
-    nsResourceSet& operator=(const nsResourceSet& aResourceSet);
-
-    ~nsResourceSet();
-
-    nsresult Clear();
-    nsresult Add(nsIRDFResource* aProperty);
-    void Remove(nsIRDFResource* aProperty);
-
-    bool Contains(nsIRDFResource* aProperty) const;
-
-protected:
-    nsIRDFResource** mResources;
-    int32_t mCount;
-    int32_t mCapacity;
-
-public:
-    class ConstIterator {
-    protected:
-        nsIRDFResource** mCurrent;
-
-    public:
-        ConstIterator() : mCurrent(nullptr) {}
-
-        ConstIterator(const ConstIterator& aConstIterator)
-            : mCurrent(aConstIterator.mCurrent) {}
-
-        ConstIterator& operator=(const ConstIterator& aConstIterator) {
-            mCurrent = aConstIterator.mCurrent;
-            return *this; }
-
-        ConstIterator& operator++() {
-            ++mCurrent;
-            return *this; }
-
-        ConstIterator operator++(int) {
-            ConstIterator result(*this);
-            ++mCurrent;
-            return result; }
-
-        /*const*/ nsIRDFResource* operator*() const {
-            return *mCurrent; }
-
-        /*const*/ nsIRDFResource* operator->() const MOZ_NO_ADDREF_RELEASE_ON_RETURN {
-            return *mCurrent; }
-
-        bool operator==(const ConstIterator& aConstIterator) const {
-            return mCurrent == aConstIterator.mCurrent; }
-
-        bool operator!=(const ConstIterator& aConstIterator) const {
-            return mCurrent != aConstIterator.mCurrent; }
-
-    protected:
-        explicit ConstIterator(nsIRDFResource** aProperty) : mCurrent(aProperty) {}
-        friend class nsResourceSet;
-    };
-
-    ConstIterator First() const { return ConstIterator(mResources); }
-    ConstIterator Last() const { return ConstIterator(mResources + mCount); }
-};
-
-#endif // nsResourceSet_h__
-
deleted file mode 100644
--- a/dom/xul/templates/nsRuleNetwork.cpp
+++ /dev/null
@@ -1,428 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  Implementations for the rule network classes.
-
-  To Do.
-
-  - Constrain() & Propagate() still feel like they are poorly named.
-  - As do Instantiation and InstantiationSet.
-  - Make InstantiationSet share and do copy-on-write.
-  - Make things iterative, instead of recursive.
-
- */
-
-#include "nscore.h"
-#include "nsCOMPtr.h"
-#include "plhash.h"
-
-#include "mozilla/Logging.h"
-
-#include "nsString.h"
-#include "nsUnicharUtils.h"
-#include "nsXULContentUtils.h"
-
-#include "nsRuleNetwork.h"
-#include "nsXULTemplateResultSetRDF.h"
-#include "nsRDFConMemberTestNode.h"
-#include "nsRDFPropertyTestNode.h"
-
-using namespace mozilla;
-extern LazyLogModule gXULTemplateLog;
-
-//----------------------------------------------------------------------
-//
-// nsRuleNetwork
-//
-
-nsresult
-MemoryElementSet::Add(MemoryElement* aElement)
-{
-    for (ConstIterator element = First(); element != Last(); ++element) {
-        if (*element == *aElement) {
-            // We've already got this element covered. Since Add()
-            // assumes ownership, and we aren't going to need this,
-            // just nuke it.
-            delete aElement;
-            return NS_OK;
-        }
-    }
-
-    List* list = new List;
-    list->mElement = aElement;
-    list->mRefCnt  = 1;
-    list->mNext    = mElements;
-
-    mElements = list;
-
-    return NS_OK;
-}
-
-
-//----------------------------------------------------------------------
-
-nsresult
-nsAssignmentSet::Add(const nsAssignment& aAssignment)
-{
-    NS_PRECONDITION(! HasAssignmentFor(aAssignment.mVariable), "variable already bound");
-
-    // XXXndeakin should this just silently fail?
-    if (HasAssignmentFor(aAssignment.mVariable))
-        return NS_ERROR_UNEXPECTED;
-
-    List* list = new List(aAssignment);
-    list->mRefCnt     = 1;
-    list->mNext       = mAssignments;
-
-    mAssignments = list;
-
-    return NS_OK;
-}
-
-int32_t
-nsAssignmentSet::Count() const
-{
-    int32_t count = 0;
-    for (ConstIterator assignment = First(); assignment != Last(); ++assignment)
-        ++count;
-
-    return count;
-}
-
-bool
-nsAssignmentSet::HasAssignment(nsAtom* aVariable, nsIRDFNode* aValue) const
-{
-    for (ConstIterator assignment = First(); assignment != Last(); ++assignment) {
-        if (assignment->mVariable == aVariable && assignment->mValue == aValue)
-            return true;
-    }
-
-    return false;
-}
-
-bool
-nsAssignmentSet::HasAssignmentFor(nsAtom* aVariable) const
-{
-    for (ConstIterator assignment = First(); assignment != Last(); ++assignment) {
-        if (assignment->mVariable == aVariable)
-            return true;
-    }
-
-    return false;
-}
-
-bool
-nsAssignmentSet::GetAssignmentFor(nsAtom* aVariable, nsIRDFNode** aValue) const
-{
-    for (ConstIterator assignment = First(); assignment != Last(); ++assignment) {
-        if (assignment->mVariable == aVariable) {
-            *aValue = assignment->mValue;
-            NS_IF_ADDREF(*aValue);
-            return true;
-        }
-    }
-
-    *aValue = nullptr;
-    return false;
-}
-
-bool
-nsAssignmentSet::Equals(const nsAssignmentSet& aSet) const
-{
-    if (aSet.mAssignments == mAssignments)
-        return true;
-
-    // If they have a different number of assignments, then they're different.
-    if (Count() != aSet.Count())
-        return false;
-
-    // XXX O(n^2)! Ugh!
-    nsCOMPtr<nsIRDFNode> value;
-    for (ConstIterator assignment = First(); assignment != Last(); ++assignment) {
-        if (! aSet.GetAssignmentFor(assignment->mVariable, getter_AddRefs(value)))
-            return false;
-
-        if (assignment->mValue != value)
-            return false;
-    }
-
-    return true;
-}
-
-//----------------------------------------------------------------------
-
-PLHashNumber
-Instantiation::Hash(const void* aKey)
-{
-    const Instantiation* inst = static_cast<const Instantiation*>(aKey);
-
-    PLHashNumber result = 0;
-
-    nsAssignmentSet::ConstIterator last = inst->mAssignments.Last();
-    for (nsAssignmentSet::ConstIterator assignment = inst->mAssignments.First();
-         assignment != last; ++assignment)
-        result ^= assignment->Hash();
-
-    return result;
-}
-
-
-int
-Instantiation::Compare(const void* aLeft, const void* aRight)
-{
-    const Instantiation* left  = static_cast<const Instantiation*>(aLeft);
-    const Instantiation* right = static_cast<const Instantiation*>(aRight);
-
-    return *left == *right;
-}
-
-
-//----------------------------------------------------------------------
-//
-// InstantiationSet
-//
-
-InstantiationSet::InstantiationSet()
-{
-    mHead.mPrev = mHead.mNext = &mHead;
-    MOZ_COUNT_CTOR(InstantiationSet);
-}
-
-
-InstantiationSet::InstantiationSet(const InstantiationSet& aInstantiationSet)
-{
-    mHead.mPrev = mHead.mNext = &mHead;
-
-    // XXX replace with copy-on-write foo
-    ConstIterator last = aInstantiationSet.Last();
-    for (ConstIterator inst = aInstantiationSet.First(); inst != last; ++inst)
-        Append(*inst);
-
-    MOZ_COUNT_CTOR(InstantiationSet);
-}
-
-InstantiationSet&
-InstantiationSet::operator=(const InstantiationSet& aInstantiationSet)
-{
-    // XXX replace with copy-on-write foo
-    Clear();
-
-    ConstIterator last = aInstantiationSet.Last();
-    for (ConstIterator inst = aInstantiationSet.First(); inst != last; ++inst)
-        Append(*inst);
-
-    return *this;
-}
-
-
-void
-InstantiationSet::Clear()
-{
-    Iterator inst = First();
-    while (inst != Last())
-        Erase(inst++);
-}
-
-
-InstantiationSet::Iterator
-InstantiationSet::Insert(Iterator aIterator, const Instantiation& aInstantiation)
-{
-    List* newelement = new List();
-    if (newelement) {
-        newelement->mInstantiation = aInstantiation;
-
-        aIterator.mCurrent->mPrev->mNext = newelement;
-
-        newelement->mNext = aIterator.mCurrent;
-        newelement->mPrev = aIterator.mCurrent->mPrev;
-
-        aIterator.mCurrent->mPrev = newelement;
-    }
-    return aIterator;
-}
-
-InstantiationSet::Iterator
-InstantiationSet::Erase(Iterator aIterator)
-{
-    Iterator result = aIterator;
-    ++result;
-    aIterator.mCurrent->mNext->mPrev = aIterator.mCurrent->mPrev;
-    aIterator.mCurrent->mPrev->mNext = aIterator.mCurrent->mNext;
-    delete aIterator.mCurrent;
-    return result;
-}
-
-
-bool
-InstantiationSet::HasAssignmentFor(nsAtom* aVariable) const
-{
-    return !Empty() ? First()->mAssignments.HasAssignmentFor(aVariable) : false;
-}
-
-//----------------------------------------------------------------------
-//
-// ReteNode
-//
-//   The basic node in the network.
-//
-
-//----------------------------------------------------------------------
-//
-// TestNode
-//
-//   to do:
-//     - FilterInstantiations() is poorly named
-//
-
-
-TestNode::TestNode(TestNode* aParent)
-    : mParent(aParent)
-{
-}
-
-nsresult
-TestNode::Propagate(InstantiationSet& aInstantiations,
-                    bool aIsUpdate, bool& aTakenInstantiations)
-{
-    MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-           ("TestNode[%p]: Propagate() begin", this));
-
-    aTakenInstantiations = false;
-
-    nsresult rv = FilterInstantiations(aInstantiations, nullptr);
-    if (NS_FAILED(rv))
-        return rv;
-
-    // if there is more than one child, each will need to be supplied with the
-    // original set of instantiations from this node, so create a copy in this
-    // case. If there is only one child, optimize and just pass the
-    // instantiations along to the child without copying
-    bool shouldCopy = (mKids.Count() > 1);
-
-    // See the header file for details about how instantiation ownership works.
-    if (! aInstantiations.Empty()) {
-        ReteNodeSet::Iterator last = mKids.Last();
-        for (ReteNodeSet::Iterator kid = mKids.First(); kid != last; ++kid) {
-            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                   ("TestNode[%p]: Propagate() passing to child %p", this, kid.operator->()));
-
-            // create a copy of the instantiations
-            if (shouldCopy) {
-                bool owned = false;
-                InstantiationSet* instantiations =
-                    new InstantiationSet(aInstantiations);
-                rv = kid->Propagate(*instantiations, aIsUpdate, owned);
-                if (!owned)
-                    delete instantiations;
-                if (NS_FAILED(rv))
-                    return rv;
-            }
-            else {
-                rv = kid->Propagate(aInstantiations, aIsUpdate, aTakenInstantiations);
-                if (NS_FAILED(rv))
-                    return rv;
-            }
-        }
-    }
-
-    MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-           ("TestNode[%p]: Propagate() end", this));
-
-    return NS_OK;
-}
-
-
-nsresult
-TestNode::Constrain(InstantiationSet& aInstantiations)
-{
-    nsresult rv;
-
-    MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-           ("TestNode[%p]: Constrain() begin", this));
-
-    // if the cantHandleYet flag is set by FilterInstantiations,
-    // there isn't enough information yet available to fill in.
-    // For this, continue the constrain all the way to the top
-    // and then call FilterInstantiations again afterwards. This
-    // should fill in any missing information.
-    bool cantHandleYet = false;
-    rv = FilterInstantiations(aInstantiations, &cantHandleYet);
-    if (NS_FAILED(rv)) return rv;
-
-    if (mParent && (!aInstantiations.Empty() || cantHandleYet)) {
-        // if we still have instantiations, or if the instantiations
-        // could not be filled in yet, then ride 'em on up to the
-        // parent to narrow them.
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("TestNode[%p]: Constrain() passing to parent %p", this, mParent));
-
-        rv = mParent->Constrain(aInstantiations);
-
-        if (NS_SUCCEEDED(rv) && cantHandleYet)
-            rv = FilterInstantiations(aInstantiations, nullptr);
-    }
-    else {
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("TestNode[%p]: Constrain() failed", this));
-
-        rv = NS_OK;
-    }
-
-    MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-           ("TestNode[%p]: Constrain() end", this));
-
-    return rv;
-}
-
-
-//----------------------------------------------------------------------
-
-ReteNodeSet::ReteNodeSet()
-    : mNodes(nullptr), mCount(0), mCapacity(0)
-{
-}
-
-ReteNodeSet::~ReteNodeSet()
-{
-    Clear();
-}
-
-nsresult
-ReteNodeSet::Add(ReteNode* aNode)
-{
-    NS_PRECONDITION(aNode != nullptr, "null ptr");
-    if (! aNode)
-        return NS_ERROR_NULL_POINTER;
-
-    if (mCount >= mCapacity) {
-        int32_t capacity = mCapacity + 4;
-        ReteNode** nodes = new ReteNode*[capacity];
-        if (! nodes)
-            return NS_ERROR_OUT_OF_MEMORY;
-
-        for (int32_t i = mCount - 1; i >= 0; --i)
-            nodes[i] = mNodes[i];
-
-        delete[] mNodes;
-
-        mNodes = nodes;
-        mCapacity = capacity;
-    }
-
-    mNodes[mCount++] = aNode;
-    return NS_OK;
-}
-
-nsresult
-ReteNodeSet::Clear()
-{
-    delete[] mNodes;
-    mNodes = nullptr;
-    mCount = mCapacity = 0;
-    return NS_OK;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsRuleNetwork.h
+++ /dev/null
@@ -1,861 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  A rule discrimination network implementation based on ideas from
-  RETE and TREAT.
-
-  RETE is described in Charles Forgy, "Rete: A Fast Algorithm for the
-  Many Patterns/Many Objects Match Problem", Artificial Intelligence
-  19(1): pp. 17-37, 1982.
-
-  TREAT is described in Daniel P. Miranker, "TREAT: A Better Match
-  Algorithm for AI Production System Matching", AAAI 1987: pp. 42-47.
-
-  --
-
-  TO DO:
-
-  . nsAssignmentSet::List objects are allocated by the gallon. We
-    should make it so that these are always allocated from a pool,
-    maybe owned by the nsRuleNetwork?
-
- */
-
-#ifndef nsRuleNetwork_h__
-#define nsRuleNetwork_h__
-
-#include "mozilla/Attributes.h"
-#include "mozilla/HashFunctions.h"
-#include "nsCOMPtr.h"
-#include "nsCOMArray.h"
-#include "nsAtom.h"
-#include "nsIDOMNode.h"
-#include "plhash.h"
-#include "PLDHashTable.h"
-#include "nsIRDFNode.h"
-
-class nsXULTemplateResultSetRDF;
-
-//----------------------------------------------------------------------
-
-/**
- * A memory element that supports an instantiation. A memory element holds a
- * set of nodes involved in an RDF test such as <member> or <triple> test. A
- * memory element is created when a specific test matches. The query processor
- * maintains a map between the memory elements and the results they eventually
- * matched. When an assertion is removed from the graph, this map is consulted
- * to determine which results will no longer match.
- */
-class MemoryElement {
-protected:
-    MemoryElement() { MOZ_COUNT_CTOR(MemoryElement); }
-
-public:
-    virtual ~MemoryElement() { MOZ_COUNT_DTOR(MemoryElement); }
-
-    virtual const char* Type() const = 0;
-    virtual PLHashNumber Hash() const = 0;
-    virtual bool Equals(const MemoryElement& aElement) const = 0;
-
-    bool operator==(const MemoryElement& aMemoryElement) const {
-        return Equals(aMemoryElement);
-    }
-
-    bool operator!=(const MemoryElement& aMemoryElement) const {
-        return !Equals(aMemoryElement);
-    }
-};
-
-//----------------------------------------------------------------------
-
-/**
- * A collection of memory elements
- */
-class MemoryElementSet {
-public:
-    class ConstIterator;
-    friend class ConstIterator;
-
-protected:
-    class List {
-    public:
-        List() { MOZ_COUNT_CTOR(MemoryElementSet::List); }
-
-    protected:
-        ~List() {
-            MOZ_COUNT_DTOR(MemoryElementSet::List);
-            delete mElement;
-            NS_IF_RELEASE(mNext); }
-
-    public:
-        int32_t AddRef() { return ++mRefCnt; }
-
-        int32_t Release() {
-            int32_t refcnt = --mRefCnt;
-            if (refcnt == 0) delete this;
-            return refcnt; }
-
-        MemoryElement* mElement;
-        int32_t        mRefCnt;
-        List*          mNext;
-    };
-
-    List* mElements;
-
-public:
-    MemoryElementSet() : mElements(nullptr) {
-        MOZ_COUNT_CTOR(MemoryElementSet); }
-
-    MemoryElementSet(const MemoryElementSet& aSet) : mElements(aSet.mElements) {
-        MOZ_COUNT_CTOR(MemoryElementSet);
-        NS_IF_ADDREF(mElements); }
-
-    MemoryElementSet& operator=(const MemoryElementSet& aSet) {
-        NS_IF_RELEASE(mElements);
-        mElements = aSet.mElements;
-        NS_IF_ADDREF(mElements);
-        return *this; }
-
-    ~MemoryElementSet() {
-        MOZ_COUNT_DTOR(MemoryElementSet);
-        NS_IF_RELEASE(mElements); }
-
-public:
-    class ConstIterator {
-    public:
-        explicit ConstIterator(List* aElementList) : mCurrent(aElementList) {
-            NS_IF_ADDREF(mCurrent); }
-
-        ConstIterator(const ConstIterator& aConstIterator)
-            : mCurrent(aConstIterator.mCurrent) {
-            NS_IF_ADDREF(mCurrent); }
-
-        ConstIterator& operator=(const ConstIterator& aConstIterator) {
-            NS_IF_RELEASE(mCurrent);
-            mCurrent = aConstIterator.mCurrent;
-            NS_IF_ADDREF(mCurrent);
-            return *this; }
-
-        ~ConstIterator() { NS_IF_RELEASE(mCurrent); }
-
-        ConstIterator& operator++() {
-            List* next = mCurrent->mNext;
-            NS_RELEASE(mCurrent);
-            mCurrent = next;
-            NS_IF_ADDREF(mCurrent);
-            return *this; }
-
-        ConstIterator operator++(int) {
-            ConstIterator result(*this);
-            List* next = mCurrent->mNext;
-            NS_RELEASE(mCurrent);
-            mCurrent = next;
-            NS_IF_ADDREF(mCurrent);
-            return result; }
-
-        const MemoryElement& operator*() const {
-            return *mCurrent->mElement; }
-
-        const MemoryElement* operator->() const {
-            return mCurrent->mElement; }
-
-        bool operator==(const ConstIterator& aConstIterator) const {
-            return mCurrent == aConstIterator.mCurrent; }
-
-        bool operator!=(const ConstIterator& aConstIterator) const {
-            return mCurrent != aConstIterator.mCurrent; }
-
-    protected:
-        List* mCurrent;
-    };
-
-    ConstIterator First() const { return ConstIterator(mElements); }
-    ConstIterator Last() const { return ConstIterator(nullptr); }
-
-    // N.B. that the set assumes ownership of the element
-    nsresult Add(MemoryElement* aElement);
-};
-
-//----------------------------------------------------------------------
-
-/**
- * An assignment of a value to a variable
- */
-class nsAssignment {
-public:
-    const RefPtr<nsAtom> mVariable;
-    nsCOMPtr<nsIRDFNode> mValue;
-
-    nsAssignment(nsAtom* aVariable, nsIRDFNode* aValue)
-        : mVariable(aVariable),
-          mValue(aValue)
-        { MOZ_COUNT_CTOR(nsAssignment); }
-
-    nsAssignment(const nsAssignment& aAssignment)
-        : mVariable(aAssignment.mVariable),
-          mValue(aAssignment.mValue)
-        { MOZ_COUNT_CTOR(nsAssignment); }
-
-    ~nsAssignment() { MOZ_COUNT_DTOR(nsAssignment); }
-
-    bool operator==(const nsAssignment& aAssignment) const {
-        return mVariable == aAssignment.mVariable && mValue == aAssignment.mValue; }
-
-    bool operator!=(const nsAssignment& aAssignment) const {
-        return mVariable != aAssignment.mVariable || mValue != aAssignment.mValue; }
-
-    PLHashNumber Hash() const {
-        using mozilla::HashGeneric;
-        return HashGeneric(mVariable.get()) ^ HashGeneric(mValue.get()); }
-};
-
-
-//----------------------------------------------------------------------
-
-/**
- * A collection of value-to-variable assignments that minimizes
- * copying by sharing subsets when possible.
- */
-class nsAssignmentSet {
-public:
-    class ConstIterator;
-    friend class ConstIterator;
-
-protected:
-    class List {
-    public:
-        explicit List(const nsAssignment& aAssignment) : mAssignment(aAssignment) {
-            MOZ_COUNT_CTOR(nsAssignmentSet::List); }
-
-    protected:
-        ~List() {
-            MOZ_COUNT_DTOR(nsAssignmentSet::List);
-            NS_IF_RELEASE(mNext); }
-
-    public:
-
-        int32_t AddRef() { return ++mRefCnt; }
-
-        int32_t Release() {
-            int32_t refcnt = --mRefCnt;
-            if (refcnt == 0) delete this;
-            return refcnt; }
-
-        nsAssignment mAssignment;
-        int32_t mRefCnt;
-        List*   mNext;
-    };
-
-    List* mAssignments;
-
-public:
-    nsAssignmentSet()
-        : mAssignments(nullptr)
-        { MOZ_COUNT_CTOR(nsAssignmentSet); }
-
-    nsAssignmentSet(const nsAssignmentSet& aSet)
-        : mAssignments(aSet.mAssignments) {
-        MOZ_COUNT_CTOR(nsAssignmentSet);
-        NS_IF_ADDREF(mAssignments); }
-
-    nsAssignmentSet& operator=(const nsAssignmentSet& aSet) {
-        NS_IF_RELEASE(mAssignments);
-        mAssignments = aSet.mAssignments;
-        NS_IF_ADDREF(mAssignments);
-        return *this; }
-
-    ~nsAssignmentSet() {
-        MOZ_COUNT_DTOR(nsAssignmentSet);
-        NS_IF_RELEASE(mAssignments); }
-
-public:
-    class ConstIterator {
-    public:
-        explicit ConstIterator(List* aAssignmentList) : mCurrent(aAssignmentList) {
-            NS_IF_ADDREF(mCurrent); }
-
-        ConstIterator(const ConstIterator& aConstIterator)
-            : mCurrent(aConstIterator.mCurrent) {
-            NS_IF_ADDREF(mCurrent); }
-
-        ConstIterator& operator=(const ConstIterator& aConstIterator) {
-            NS_IF_RELEASE(mCurrent);
-            mCurrent = aConstIterator.mCurrent;
-            NS_IF_ADDREF(mCurrent);
-            return *this; }
-
-        ~ConstIterator() { NS_IF_RELEASE(mCurrent); }
-
-        ConstIterator& operator++() {
-            List* next = mCurrent->mNext;
-            NS_RELEASE(mCurrent);
-            mCurrent = next;
-            NS_IF_ADDREF(mCurrent);
-            return *this; }
-
-        ConstIterator operator++(int) {
-            ConstIterator result(*this);
-            List* next = mCurrent->mNext;
-            NS_RELEASE(mCurrent);
-            mCurrent = next;
-            NS_IF_ADDREF(mCurrent);
-            return result; }
-
-        const nsAssignment& operator*() const {
-            return mCurrent->mAssignment; }
-
-        const nsAssignment* operator->() const {
-            return &mCurrent->mAssignment; }
-
-        bool operator==(const ConstIterator& aConstIterator) const {
-            return mCurrent == aConstIterator.mCurrent; }
-
-        bool operator!=(const ConstIterator& aConstIterator) const {
-            return mCurrent != aConstIterator.mCurrent; }
-
-    protected:
-        List* mCurrent;
-    };
-
-    ConstIterator First() const { return ConstIterator(mAssignments); }
-    ConstIterator Last() const { return ConstIterator(nullptr); }
-
-public:
-    /**
-     * Add an assignment to the set
-     * @param aElement the assigment to add
-     * @return NS_OK if all is well, NS_ERROR_OUT_OF_MEMORY if memory
-     *   could not be allocated for the addition.
-     */
-    nsresult Add(const nsAssignment& aElement);
-
-    /**
-     * Determine if the assignment set contains the specified variable
-     * to value assignment.
-     * @param aVariable the variable for which to lookup the binding
-     * @param aValue the value to query
-     * @return true if aVariable is bound to aValue; false otherwise.
-     */
-    bool HasAssignment(nsAtom* aVariable, nsIRDFNode* aValue) const;
-
-    /**
-     * Determine if the assignment set contains the specified assignment
-     * @param aAssignment the assignment to search for
-     * @return true if the set contains the assignment, false otherwise.
-     */
-    bool HasAssignment(const nsAssignment& aAssignment) const {
-        return HasAssignment(aAssignment.mVariable, aAssignment.mValue); }
-
-    /**
-     * Determine whether the assignment set has an assignment for the
-     * specified variable.
-     * @param aVariable the variable to query
-     * @return true if the assignment set has an assignment for the variable,
-     *   false otherwise.
-     */
-    bool HasAssignmentFor(nsAtom* aVariable) const;
-
-    /**
-     * Retrieve the assignment for the specified variable
-     * @param aVariable the variable to query
-     * @param aValue an out parameter that will receive the value assigned
-     *   to the variable, if any.
-     * @return true if the variable has an assignment, false
-     *   if there was no assignment for the variable.
-     */
-    bool GetAssignmentFor(nsAtom* aVariable, nsIRDFNode** aValue) const;
-
-    /**
-     * Count the number of assignments in the set
-     * @return the number of assignments in the set
-     */
-    int32_t Count() const;
-
-    /**
-     * Determine if the set is empty
-     * @return true if the assignment set is empty, false otherwise.
-     */
-    bool IsEmpty() const { return mAssignments == nullptr; }
-
-    bool Equals(const nsAssignmentSet& aSet) const;
-    bool operator==(const nsAssignmentSet& aSet) const { return Equals(aSet); }
-    bool operator!=(const nsAssignmentSet& aSet) const { return !Equals(aSet); }
-};
-
-
-//----------------------------------------------------------------------
-
-/**
- * A collection of variable-to-value bindings, with the memory elements
- * that support those bindings. Essentially, an instantiation is the
- * collection of variables and values assigned to those variables for a single
- * result. For each RDF rule in the rule network, each instantiation is
- * examined and either extended with additional bindings specified by the RDF
- * rule, or removed if the rule doesn't apply (for instance if a node has no
- * children). When an instantiation gets to the last node of the rule network,
- * which is always an nsInstantiationNode, a result is created for it.
- *
- * An instantiation object is typically created by "extending" another
- * instantiation object. That is, using the copy constructor, and
- * adding bindings and support to the instantiation.
- */
-class Instantiation
-{
-public:
-    /**
-     * The variable-to-value bindings
-     */
-    nsAssignmentSet  mAssignments;
-
-    /**
-     * The memory elements that support the bindings.
-     */
-    MemoryElementSet mSupport;
-
-    Instantiation() { MOZ_COUNT_CTOR(Instantiation); }
-
-    Instantiation(const Instantiation& aInstantiation)
-        : mAssignments(aInstantiation.mAssignments),
-          mSupport(aInstantiation.mSupport) {
-        MOZ_COUNT_CTOR(Instantiation); }
-
-    Instantiation& operator=(const Instantiation& aInstantiation) {
-        mAssignments = aInstantiation.mAssignments;
-        mSupport  = aInstantiation.mSupport;
-        return *this; }
-
-    ~Instantiation() { MOZ_COUNT_DTOR(Instantiation); }
-
-    /**
-     * Add the specified variable-to-value assignment to the instantiation's
-     * set of assignments.
-     * @param aVariable the variable to which is being assigned
-     * @param aValue the value that is being assigned
-     * @return NS_OK if no errors, NS_ERROR_OUT_OF_MEMORY if there
-     *   is not enough memory to perform the operation
-     */
-    nsresult AddAssignment(nsAtom* aVariable, nsIRDFNode* aValue) {
-        mAssignments.Add(nsAssignment(aVariable, aValue));
-        return NS_OK; }
-
-    /**
-     * Add a memory element to the set of memory elements that are
-     * supporting the instantiation
-     * @param aMemoryElement the memory element to add to the
-     *   instantiation's set of support
-     * @return NS_OK if no errors occurred, NS_ERROR_OUT_OF_MEMORY
-     *   if there is not enough memory to perform the operation.
-     */
-    nsresult AddSupportingElement(MemoryElement* aMemoryElement) {
-        mSupport.Add(aMemoryElement);
-        return NS_OK; }
-
-    bool Equals(const Instantiation& aInstantiation) const {
-        return mAssignments == aInstantiation.mAssignments; }
-
-    bool operator==(const Instantiation& aInstantiation) const {
-        return Equals(aInstantiation); }
-
-    bool operator!=(const Instantiation& aInstantiation) const {
-        return !Equals(aInstantiation); }
-
-    static PLHashNumber Hash(const void* aKey);
-    static int Compare(const void* aLeft, const void* aRight);
-};
-
-
-//----------------------------------------------------------------------
-
-/**
- * A collection of intantiations
- */
-class InstantiationSet
-{
-public:
-    InstantiationSet();
-    InstantiationSet(const InstantiationSet& aInstantiationSet);
-    InstantiationSet& operator=(const InstantiationSet& aInstantiationSet);
-
-    ~InstantiationSet() {
-        MOZ_COUNT_DTOR(InstantiationSet);
-        Clear(); }
-
-    class ConstIterator;
-    friend class ConstIterator;
-
-    class Iterator;
-    friend class Iterator;
-
-    friend class nsXULTemplateResultSetRDF; // so it can get to the List
-
-protected:
-    class List {
-    public:
-        Instantiation mInstantiation;
-        List*         mNext;
-        List*         mPrev;
-
-        List() { MOZ_COUNT_CTOR(InstantiationSet::List); }
-        ~List() { MOZ_COUNT_DTOR(InstantiationSet::List); }
-    };
-
-    List mHead;
-
-public:
-    class ConstIterator {
-    protected:
-        friend class Iterator; // XXXwaterson so broken.
-        List* mCurrent;
-
-    public:
-        explicit ConstIterator(List* aList) : mCurrent(aList) {}
-
-        ConstIterator(const ConstIterator& aConstIterator)
-            : mCurrent(aConstIterator.mCurrent) {}
-
-        ConstIterator& operator=(const ConstIterator& aConstIterator) {
-            mCurrent = aConstIterator.mCurrent;
-            return *this; }
-
-        ConstIterator& operator++() {
-            mCurrent = mCurrent->mNext;
-            return *this; }
-
-        ConstIterator operator++(int) {
-            ConstIterator result(*this);
-            mCurrent = mCurrent->mNext;
-            return result; }
-
-        ConstIterator& operator--() {
-            mCurrent = mCurrent->mPrev;
-            return *this; }
-
-        ConstIterator operator--(int) {
-            ConstIterator result(*this);
-            mCurrent = mCurrent->mPrev;
-            return result; }
-
-        const Instantiation& operator*() const {
-            return mCurrent->mInstantiation; }
-
-        const Instantiation* operator->() const {
-            return &mCurrent->mInstantiation; }
-
-        bool operator==(const ConstIterator& aConstIterator) const {
-            return mCurrent == aConstIterator.mCurrent; }
-
-        bool operator!=(const ConstIterator& aConstIterator) const {
-            return mCurrent != aConstIterator.mCurrent; }
-    };
-
-    ConstIterator First() const { return ConstIterator(mHead.mNext); }
-    ConstIterator Last() const { return ConstIterator(const_cast<List*>(&mHead)); }
-
-    class Iterator : public ConstIterator {
-    public:
-        explicit Iterator(List* aList) : ConstIterator(aList) {}
-
-        Iterator& operator++() {
-            mCurrent = mCurrent->mNext;
-            return *this; }
-
-        Iterator operator++(int) {
-            Iterator result(*this);
-            mCurrent = mCurrent->mNext;
-            return result; }
-
-        Iterator& operator--() {
-            mCurrent = mCurrent->mPrev;
-            return *this; }
-
-        Iterator operator--(int) {
-            Iterator result(*this);
-            mCurrent = mCurrent->mPrev;
-            return result; }
-
-        Instantiation& operator*() const {
-            return mCurrent->mInstantiation; }
-
-        Instantiation* operator->() const {
-            return &mCurrent->mInstantiation; }
-
-        bool operator==(const ConstIterator& aConstIterator) const {
-            return mCurrent == aConstIterator.mCurrent; }
-
-        bool operator!=(const ConstIterator& aConstIterator) const {
-            return mCurrent != aConstIterator.mCurrent; }
-
-        friend class InstantiationSet;
-    };
-
-    Iterator First() { return Iterator(mHead.mNext); }
-    Iterator Last() { return Iterator(&mHead); }
-
-    bool Empty() const { return First() == Last(); }
-
-    Iterator Append(const Instantiation& aInstantiation) {
-        return Insert(Last(), aInstantiation); }
-
-    Iterator Insert(Iterator aBefore, const Instantiation& aInstantiation);
-
-    Iterator Erase(Iterator aElement);
-
-    void Clear();
-
-    bool HasAssignmentFor(nsAtom* aVariable) const;
-};
-
-//----------------------------------------------------------------------
-
-/**
- * A abstract base class for all nodes in the rule network
- */
-class ReteNode
-{
-public:
-    ReteNode() {}
-    virtual ~ReteNode() {}
-
-    /**
-     * Propagate a set of instantiations "down" through the
-     * network. Each instantiation is a partial set of
-     * variable-to-value assignments, along with the memory elements
-     * that support it.
-     *
-     * The node must evaluate each instantiation, and either 1)
-     * extend it with additional assignments and memory-element
-     * support, or 2) remove it from the set because it is
-     * inconsistent with the constraints that this node applies.
-     *
-     * The node must then pass the resulting instantiation set along
-     * to any of its children in the network. (In other words, the
-     * node must recursively call Propagate() on its children. We
-     * should fix this to make the algorithm interruptable.)
-     *
-     * See TestNode::Propagate for details about instantiation set ownership
-     *
-     * @param aInstantiations the set of instantiations to propagate
-     *   down through the network.
-     * @param aIsUpdate true if updating, false for first generation
-     * @param aTakenInstantiations true if the ownership over aInstantiations
-     *                             has been taken from the caller. If false,
-     *                             the caller owns it.
-     * @return NS_OK if no errors occurred.
-     */
-    virtual nsresult Propagate(InstantiationSet& aInstantiations,
-                               bool aIsUpdate, bool& aTakenInstantiations) = 0;
-};
-
-//----------------------------------------------------------------------
-
-/**
- * A collection of nodes in the rule network
- */
-class ReteNodeSet
-{
-public:
-    ReteNodeSet();
-    ~ReteNodeSet();
-
-    nsresult Add(ReteNode* aNode);
-    nsresult Clear();
-
-    class Iterator;
-
-    class ConstIterator {
-    public:
-        explicit ConstIterator(ReteNode** aNode) : mCurrent(aNode) {}
-
-        ConstIterator(const ConstIterator& aConstIterator)
-            : mCurrent(aConstIterator.mCurrent) {}
-
-        ConstIterator& operator=(const ConstIterator& aConstIterator) {
-            mCurrent = aConstIterator.mCurrent;
-            return *this; }
-
-        ConstIterator& operator++() {
-            ++mCurrent;
-            return *this; }
-
-        ConstIterator operator++(int) {
-            ConstIterator result(*this);
-            ++mCurrent;
-            return result; }
-
-        const ReteNode* operator*() const {
-            return *mCurrent; }
-
-        const ReteNode* operator->() const {
-            return *mCurrent; }
-
-        bool operator==(const ConstIterator& aConstIterator) const {
-            return mCurrent == aConstIterator.mCurrent; }
-
-        bool operator!=(const ConstIterator& aConstIterator) const {
-            return mCurrent != aConstIterator.mCurrent; }
-
-    protected:
-        friend class Iterator; // XXXwaterson this is so wrong!
-        ReteNode** mCurrent;
-    };
-
-    ConstIterator First() const { return ConstIterator(mNodes); }
-    ConstIterator Last() const { return ConstIterator(mNodes + mCount); }
-
-    class Iterator : public ConstIterator {
-    public:
-        explicit Iterator(ReteNode** aNode) : ConstIterator(aNode) {}
-
-        Iterator& operator++() {
-            ++mCurrent;
-            return *this; }
-
-        Iterator operator++(int) {
-            Iterator result(*this);
-            ++mCurrent;
-            return result; }
-
-        ReteNode* operator*() const {
-            return *mCurrent; }
-
-        ReteNode* operator->() const {
-            return *mCurrent; }
-
-        bool operator==(const ConstIterator& aConstIterator) const {
-            return mCurrent == aConstIterator.mCurrent; }
-
-        bool operator!=(const ConstIterator& aConstIterator) const {
-            return mCurrent != aConstIterator.mCurrent; }
-    };
-
-    Iterator First() { return Iterator(mNodes); }
-    Iterator Last() { return Iterator(mNodes + mCount); }
-
-    int32_t Count() const { return mCount; }
-
-protected:
-    ReteNode** mNodes;
-    int32_t mCount;
-    int32_t mCapacity;
-};
-
-//----------------------------------------------------------------------
-
-/**
- * A node that applies a test condition to a set of instantiations.
- *
- * This class provides implementations of Propagate() and Constrain()
- * in terms of one simple operation, FilterInstantiations(). A node
- * that is a "simple test node" in a rule network should derive from
- * this class, and need only implement FilterInstantiations().
- */
-class TestNode : public ReteNode
-{
-public:
-    explicit TestNode(TestNode* aParent);
-
-    /**
-     * Retrieve the test node's parent
-     * @return the test node's parent
-     */
-    TestNode* GetParent() const { return mParent; }
-
-    /**
-     * Calls FilterInstantiations() on the instantiation set, and if
-     * the resulting set isn't empty, propagates the new set down to
-     * each of the test node's children.
-     *
-     * Note that the caller of Propagate is responsible for deleting
-     * aInstantiations if necessary as described below.
-     *
-     * Propagate may be called in update or non-update mode as indicated
-     * by the aIsUpdate argument. Non-update mode is used when initially
-     * generating results, whereas update mode is used when the datasource
-     * changes and new results might be available.
-     *
-     * The last node in a chain of TestNodes is always an nsInstantiationNode.
-     * In non-update mode, this nsInstantiationNode will cache the results
-     * in the query using the SetCachedResults method. The query processor
-     * takes these cached results and creates a nsXULTemplateResultSetRDF
-     * which is the enumeration returned to the template builder. This
-     * nsXULTemplateResultSetRDF owns the instantiations and they will be
-     * deleted when the nsXULTemplateResultSetRDF goes away.
-     *
-     * In update mode, the nsInstantiationNode node will iterate over the
-     * instantiations itself and callback to the builder to update any matches
-     * and generated content. If no instantiations match, then the builder
-     * will never be called.
-     *
-     * Thus, the difference between update and non-update modes is that in
-     * update mode, the results and instantiations have been already handled
-     * whereas in non-update mode they are expected to be returned in an
-     * nsXULTemplateResultSetRDF for further processing by the builder.
-     *
-     * Regardless, aTakenInstantiations will be set to true if the
-     * ownership over aInstantiations has been transferred to a result set.
-     * If set to false, the caller is still responsible for aInstantiations.
-     * aTakenInstantiations will be set properly even if an error occurs.
-     */
-    virtual nsresult Propagate(InstantiationSet& aInstantiations,
-                               bool aIsUpdate, bool& aTakenInstantiations) override;
-
-    /**
-     * This is called by a child node on its parent to allow the
-     * parent's constraints to apply to the set of instantiations.
-     *
-     * A node must iterate through the set of instantiations, and for
-     * each instantiation, either 1) extend the instantiation by
-     * adding variable-to-value assignments and memory element support
-     * for those assignments, or 2) remove the instantiation because
-     * it is inconsistent.
-     *
-     * The node must then pass the resulting set of instantiations up
-     * to its parent (by recursive call; we should make this iterative
-     * & interruptable at some point.)
-     *
-     * @param aInstantiations the set of instantiations that must
-     *   be constrained
-     * @return NS_OK if no errors occurred
-     */
-    virtual nsresult Constrain(InstantiationSet& aInstantiations);
-
-    /**
-     * Given a set of instantiations, filter out any that are
-     * inconsistent with the test node's test, and append
-     * variable-to-value assignments and memory element support for
-     * those which do pass the test node's test.
-     *
-     * @param aInstantiations the set of instantiations to be
-     *        filtered
-     * @param aCantHandleYet [out] true if the instantiations do not contain
-     *        enough information to constrain the data. May be null if this
-     *        isn't important to the caller.
-     * @return NS_OK if no errors occurred.
-     */
-    virtual nsresult FilterInstantiations(InstantiationSet& aInstantiations,
-                                          bool* aCantHandleYet) const = 0;
-    //XXX probably better named "ApplyConstraints" or "Discrminiate" or something
-
-    /**
-     * Add another node as a child of this node.
-     * @param aNode the node to add.
-     * @return NS_OK if no errors occur.
-     */
-    nsresult AddChild(ReteNode* aNode) { return mKids.Add(aNode); }
-
-    /**
-     * Remove all the children of this node
-     * @return NS_OK if no errors occur.
-     */
-    nsresult RemoveAllChildren() { return mKids.Clear(); }
-
-protected:
-    TestNode* mParent;
-    ReteNodeSet mKids;
-};
-
-#endif // nsRuleNetwork_h__
deleted file mode 100644
--- a/dom/xul/templates/nsTemplateMap.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsTemplateMap_h__
-#define nsTemplateMap_h__
-
-#include "PLDHashTable.h"
-#include "nsXULElement.h"
-
-class nsTemplateMap {
-protected:
-    struct Entry : public PLDHashEntryHdr {
-        nsIContent*     mContent;
-        nsIContent*     mTemplate;
-    };
-
-    PLDHashTable mTable;
-
-public:
-    nsTemplateMap() : mTable(PLDHashTable::StubOps(), sizeof(Entry)) { }
-
-    ~nsTemplateMap() { }
-
-    void
-    Put(nsIContent* aContent, nsIContent* aTemplate) {
-        NS_ASSERTION(!mTable.Search(aContent), "aContent already in map");
-
-        auto entry = static_cast<Entry*>(mTable.Add(aContent, mozilla::fallible));
-
-        if (entry) {
-            entry->mContent = aContent;
-            entry->mTemplate = aTemplate;
-        }
-    }
-
-    void
-    Remove(nsIContent* aContent) {
-        mTable.Remove(aContent);
-
-        for (nsIContent* child = aContent->GetFirstChild();
-             child;
-             child = child->GetNextSibling()) {
-            Remove(child);
-        }
-    }
-
-
-    void
-    GetTemplateFor(nsIContent* aContent, nsIContent** aResult) {
-        auto entry = static_cast<Entry*>(mTable.Search(aContent));
-        if (entry)
-            NS_IF_ADDREF(*aResult = entry->mTemplate);
-        else
-            *aResult = nullptr;
-    }
-
-    void
-    Clear() { mTable.Clear(); }
-};
-
-#endif // nsTemplateMap_h__
-
deleted file mode 100644
--- a/dom/xul/templates/nsTemplateMatch.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsTemplateMatch.h"
-#include "nsTemplateRule.h"
-
-// static
-void
-nsTemplateMatch::Destroy(nsTemplateMatch*& aMatch, bool aRemoveResult)
-{
-    if (aRemoveResult && aMatch->mResult)
-        aMatch->mResult->HasBeenRemoved();
-    ::delete aMatch;
-    aMatch = nullptr;
-}
-
-nsresult
-nsTemplateMatch::RuleMatched(nsTemplateQuerySet* aQuerySet,
-                             nsTemplateRule* aRule,
-                             int16_t aRuleIndex,
-                             nsIXULTemplateResult* aResult)
-{
-    // assign the rule index, used to indicate that a match is active, and
-    // so the tree builder can get the right action body to generate
-    mRuleIndex = aRuleIndex;
-
-    nsCOMPtr<nsIDOMNode> rulenode;
-    aRule->GetRuleNode(getter_AddRefs(rulenode));
-    if (rulenode)
-        return aResult->RuleMatched(aQuerySet->mCompiledQuery, rulenode);
-
-    return NS_OK;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsTemplateMatch.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsTemplateMatch_h__
-#define nsTemplateMatch_h__
-
-#include "mozilla/Attributes.h"
-#include "nsIContent.h"
-#include "nsIXULTemplateQueryProcessor.h"
-#include "nsIXULTemplateResult.h"
-#include "nsRuleNetwork.h"
-
-/**
- * A match object, where each match object is associated with one result.
- * There will be one match list for each unique id generated. However, since
- * there are multiple querysets and each may generate results with the same
- * id, they are all chained together in a linked list, ordered in the same
- * order as the respective <queryset> elements they were generated from.
- * A match can be identified by the container and id. The id is retrievable
- * from the result.
- *
- * Only one match per container and id pair is active at a time, but which
- * match is active may change as new results are added or removed. When a
- * match is active, content is generated for that match.
- *
- * Matches are stored and owned by the mMatchToMap hash in the template
- * builder.
- */
-
-class nsTemplateRule;
-class nsTemplateQuerySet;
-
-class nsTemplateMatch {
-private:
-    // Hide so that only Create() and Destroy() can be used to
-    // allocate and deallocate from the heap
-    void* operator new(size_t) CPP_THROW_NEW { MOZ_ASSERT(0); return nullptr; }
-    void operator delete(void*, size_t) { MOZ_ASSERT(0); }
-
-public:
-    nsTemplateMatch(uint16_t aQuerySetPriority,
-                    nsIXULTemplateResult* aResult,
-                    nsIContent* aContainer)
-        : mRuleIndex(-1),
-          mQuerySetPriority(aQuerySetPriority),
-          mContainer(aContainer),
-          mResult(aResult),
-          mNext(nullptr)
-    {
-      MOZ_COUNT_CTOR(nsTemplateMatch);
-    }
-
-    ~nsTemplateMatch()
-    {
-      MOZ_COUNT_DTOR(nsTemplateMatch);
-    }
-
-    static nsTemplateMatch*
-    Create(uint16_t aQuerySetPriority,
-           nsIXULTemplateResult* aResult,
-           nsIContent* aContainer) {
-        return ::new nsTemplateMatch(aQuerySetPriority, aResult, aContainer);
-    }
-
-    static void Destroy(nsTemplateMatch*& aMatch, bool aRemoveResult);
-
-    // return true if the the match is active, and has generated output
-    bool IsActive() {
-        return mRuleIndex >= 0;
-    }
-
-    // indicate that a rule is no longer active, used when a query with a
-    // lower priority has overriden the match
-    void SetInactive() {
-        mRuleIndex = -1;
-    }
-
-    // return matching rule index
-    int16_t RuleIndex() {
-        return mRuleIndex;
-    }
-
-    // return priority of query set
-    uint16_t QuerySetPriority() {
-        return mQuerySetPriority;
-    }
-
-    // return container, not addrefed. May be null.
-    nsIContent* GetContainer() {
-        return mContainer;
-    }
-
-    nsresult RuleMatched(nsTemplateQuerySet* aQuerySet,
-                         nsTemplateRule* aRule,
-                         int16_t aRuleIndex,
-                         nsIXULTemplateResult* aResult);
-
-private:
-
-    /**
-     * The index of the rule that matched, or -1 if the match is not active.
-     */
-    int16_t mRuleIndex;
-
-    /**
-     * The priority of the queryset for this rule
-     */
-    uint16_t mQuerySetPriority;
-
-    /**
-     * The container the content generated for the match is inside.
-     */
-    nsCOMPtr<nsIContent> mContainer;
-
-public:
-
-    /**
-     * The result associated with this match
-     */
-    nsCOMPtr<nsIXULTemplateResult> mResult;
-
-    /**
-     * Matches are stored in a linked list, in priority order. This first
-     * match that has a rule set (mRule) is the active match and generates
-     * content. The next match is owned by the builder, which will delete
-     * template matches when needed.
-     */
-    nsTemplateMatch *mNext;
-
-private:
-
-    nsTemplateMatch(const nsTemplateMatch& aMatch) = delete;
-    void operator=(const nsTemplateMatch& aMatch) = delete;
-};
-
-#endif // nsTemplateMatch_h__
-
deleted file mode 100644
--- a/dom/xul/templates/nsTemplateRule.cpp
+++ /dev/null
@@ -1,422 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsTemplateRule.h"
-#include "nsTemplateMatch.h"
-#include "nsXULContentUtils.h"
-#include "nsUnicharUtils.h"
-#include "nsReadableUtils.h"
-#include "nsICollation.h"
-
-nsTemplateCondition::nsTemplateCondition(nsAtom* aSourceVariable,
-                                         const nsAString& aRelation,
-                                         nsAtom* aTargetVariable,
-                                         bool aIgnoreCase,
-                                         bool aNegate)
-    : mSourceVariable(aSourceVariable),
-      mTargetVariable(aTargetVariable),
-      mIgnoreCase(aIgnoreCase),
-      mNegate(aNegate),
-      mNext(nullptr)
-{
-    SetRelation(aRelation);
-
-    MOZ_COUNT_CTOR(nsTemplateCondition);
-}
-
-nsTemplateCondition::nsTemplateCondition(nsAtom* aSourceVariable,
-                                         const nsAString& aRelation,
-                                         const nsAString& aTargets,
-                                         bool aIgnoreCase,
-                                         bool aNegate,
-                                         bool aIsMultiple)
-    : mSourceVariable(aSourceVariable),
-      mIgnoreCase(aIgnoreCase),
-      mNegate(aNegate),
-      mNext(nullptr)
-{
-    SetRelation(aRelation);
-
-    if (aIsMultiple) {
-        int32_t start = 0, end = 0;
-        while ((end = aTargets.FindChar(',',start)) >= 0) {
-            if (end > start) {
-                mTargetList.AppendElement(Substring(aTargets, start, end - start));
-            }
-            start = end + 1;
-        }
-        if (start < int32_t(aTargets.Length())) {
-            mTargetList.AppendElement(Substring(aTargets, start));
-        }
-    }
-    else {
-        mTargetList.AppendElement(aTargets);
-    }
-
-    MOZ_COUNT_CTOR(nsTemplateCondition);
-}
-
-nsTemplateCondition::nsTemplateCondition(const nsAString& aSource,
-                                         const nsAString& aRelation,
-                                         nsAtom* aTargetVariable,
-                                         bool aIgnoreCase,
-                                         bool aNegate)
-    : mSource(aSource),
-      mTargetVariable(aTargetVariable),
-      mIgnoreCase(aIgnoreCase),
-      mNegate(aNegate),
-      mNext(nullptr)
-{
-    SetRelation(aRelation);
-
-    MOZ_COUNT_CTOR(nsTemplateCondition);
-}
-
-void
-nsTemplateCondition::SetRelation(const nsAString& aRelation)
-{
-    if (aRelation.EqualsLiteral("equals") || aRelation.IsEmpty())
-        mRelation = eEquals;
-    else if (aRelation.EqualsLiteral("less"))
-        mRelation = eLess;
-    else if (aRelation.EqualsLiteral("greater"))
-        mRelation = eGreater;
-    else if (aRelation.EqualsLiteral("before"))
-        mRelation = eBefore;
-    else if (aRelation.EqualsLiteral("after"))
-        mRelation = eAfter;
-    else if (aRelation.EqualsLiteral("startswith"))
-        mRelation = eStartswith;
-    else if (aRelation.EqualsLiteral("endswith"))
-        mRelation = eEndswith;
-    else if (aRelation.EqualsLiteral("contains"))
-        mRelation = eContains;
-    else
-        mRelation = eUnknown;
-}
-
-bool
-nsTemplateCondition::CheckMatch(nsIXULTemplateResult* aResult)
-{
-    bool match = false;
-
-    nsAutoString leftString;
-    if (mSourceVariable)
-      aResult->GetBindingFor(mSourceVariable, leftString);
-    else
-      leftString.Assign(mSource);
-
-    if (mTargetVariable) {
-        nsAutoString rightString;
-        aResult->GetBindingFor(mTargetVariable, rightString);
-
-        match = CheckMatchStrings(leftString, rightString);
-    }
-    else {
-        // iterate over the strings in the target and determine
-        // whether there is a match.
-        uint32_t length = mTargetList.Length();
-        for (uint32_t t = 0; t < length; t++) {
-            match = CheckMatchStrings(leftString, mTargetList[t]);
-
-            // stop once a match is found. In negate mode, stop once a
-            // target does not match.
-            if (match != mNegate) break;
-        }
-    }
-
-    return match;
-}
-
-
-bool
-nsTemplateCondition::CheckMatchStrings(const nsAString& aLeftString,
-                                       const nsAString& aRightString)
-{
-    bool match = false;
-
-    if (aRightString.IsEmpty()) {
-        if ((mRelation == eEquals) && aLeftString.IsEmpty())
-            match = true;
-    }
-    else {
-        switch (mRelation) {
-            case eEquals:
-                if (mIgnoreCase)
-                    match = aLeftString.Equals(aRightString,
-                                               nsCaseInsensitiveStringComparator());
-                else
-                    match = aLeftString.Equals(aRightString);
-                break;
-
-            case eLess:
-            case eGreater:
-            {
-                // non-numbers always compare false
-                nsresult err;
-                int32_t leftint = PromiseFlatString(aLeftString).ToInteger(&err);
-                if (NS_SUCCEEDED(err)) {
-                    int32_t rightint = PromiseFlatString(aRightString).ToInteger(&err);
-                    if (NS_SUCCEEDED(err)) {
-                        match = (mRelation == eLess) ? (leftint < rightint) :
-                                                       (leftint > rightint);
-                    }
-                }
-
-                break;
-            }
-
-            case eBefore:
-            {
-                nsICollation* collation = nsXULContentUtils::GetCollation();
-                if (collation) {
-                    int32_t sortOrder;
-                    collation->CompareString((mIgnoreCase ?
-                                              static_cast<int32_t>(nsICollation::kCollationCaseInSensitive) :
-                                              static_cast<int32_t>(nsICollation::kCollationCaseSensitive)),
-                                              aLeftString,
-                                              aRightString,
-                                              &sortOrder);
-                    match = (sortOrder < 0);
-                }
-                else if (mIgnoreCase) {
-                    match = (Compare(aLeftString, aRightString,
-                                     nsCaseInsensitiveStringComparator()) < 0);
-                }
-                else {
-                    match = (Compare(aLeftString, aRightString) < 0);
-                }
-                break;
-            }
-
-            case eAfter:
-            {
-                nsICollation* collation = nsXULContentUtils::GetCollation();
-                if (collation) {
-                    int32_t sortOrder;
-                    collation->CompareString((mIgnoreCase ?
-                                              static_cast<int32_t>(nsICollation::kCollationCaseInSensitive) :
-                                              static_cast<int32_t>(nsICollation::kCollationCaseSensitive)),
-                                              aLeftString,
-                                              aRightString,
-                                              &sortOrder);
-                    match = (sortOrder > 0);
-                }
-                else if (mIgnoreCase) {
-                    match = (Compare(aLeftString, aRightString,
-                                     nsCaseInsensitiveStringComparator()) > 0);
-                }
-                else {
-                    match = (Compare(aLeftString, aRightString) > 0);
-                }
-                break;
-            }
-
-            case eStartswith:
-                if (mIgnoreCase)
-                    match = (StringBeginsWith(aLeftString, aRightString,
-                                              nsCaseInsensitiveStringComparator()));
-                else
-                    match = (StringBeginsWith(aLeftString, aRightString));
-                break;
-
-            case eEndswith:
-                if (mIgnoreCase)
-                    match = (StringEndsWith(aLeftString, aRightString,
-                                            nsCaseInsensitiveStringComparator()));
-                else
-                    match = (StringEndsWith(aLeftString, aRightString));
-                break;
-
-            case eContains:
-            {
-                nsAString::const_iterator start, end;
-                aLeftString.BeginReading(start);
-                aLeftString.EndReading(end);
-                if (mIgnoreCase)
-                    match = CaseInsensitiveFindInReadable(aRightString, start, end);
-                else
-                    match = FindInReadable(aRightString, start, end);
-                break;
-            }
-
-            default:
-                break;
-        }
-    }
-
-    if (mNegate) match = !match;
-
-    return match;
-}
-
-nsTemplateRule::nsTemplateRule(nsIContent* aRuleNode,
-                               nsIContent* aAction,
-                               nsTemplateQuerySet* aQuerySet)
-        : mQuerySet(aQuerySet),
-          mAction(aAction),
-          mBindings(nullptr),
-          mConditions(nullptr)
-{
-    MOZ_COUNT_CTOR(nsTemplateRule);
-    mRuleNode = do_QueryInterface(aRuleNode);
-}
-
-nsTemplateRule::nsTemplateRule(const nsTemplateRule& aOtherRule)
-        : mQuerySet(aOtherRule.mQuerySet),
-          mRuleNode(aOtherRule.mRuleNode),
-          mAction(aOtherRule.mAction),
-          mBindings(nullptr),
-          mConditions(nullptr)
-{
-    MOZ_COUNT_CTOR(nsTemplateRule);
-}
-
-nsTemplateRule::~nsTemplateRule()
-{
-    MOZ_COUNT_DTOR(nsTemplateRule);
-
-    while (mBindings) {
-        Binding* doomed = mBindings;
-        mBindings = mBindings->mNext;
-        delete doomed;
-    }
-
-    while (mConditions) {
-        nsTemplateCondition* cdel = mConditions;
-        mConditions = mConditions->GetNext();
-        delete cdel;
-    }
-}
-
-nsresult
-nsTemplateRule::GetRuleNode(nsIDOMNode** aRuleNode) const
-{
-    *aRuleNode = mRuleNode;
-    NS_IF_ADDREF(*aRuleNode);
-    return NS_OK;
-}
-
-void nsTemplateRule::SetCondition(nsTemplateCondition* aCondition)
-{
-    while (mConditions) {
-        nsTemplateCondition* cdel = mConditions;
-        mConditions = mConditions->GetNext();
-        delete cdel;
-    }
-
-    mConditions = aCondition;
-}
-
-bool
-nsTemplateRule::CheckMatch(nsIXULTemplateResult* aResult) const
-{
-    // check the conditions in the rule first
-    nsTemplateCondition* condition = mConditions;
-    while (condition) {
-        if (!condition->CheckMatch(aResult))
-            return false;
-
-        condition = condition->GetNext();
-    }
-
-    if (mRuleFilter) {
-        // if a rule filter was set, check it for a match. If an error occurs,
-        // assume that the match was acceptable
-        bool match;
-        nsresult rv = mRuleFilter->Match(aResult, mRuleNode, &match);
-        return NS_FAILED(rv) || match;
-    }
-
-    return true;
-}
-
-bool
-nsTemplateRule::HasBinding(nsAtom* aSourceVariable,
-                           nsAString& aExpr,
-                           nsAtom* aTargetVariable) const
-{
-    for (Binding* binding = mBindings; binding != nullptr; binding = binding->mNext) {
-        if ((binding->mSourceVariable == aSourceVariable) &&
-            (binding->mExpr.Equals(aExpr)) &&
-            (binding->mTargetVariable == aTargetVariable))
-            return true;
-    }
-
-    return false;
-}
-
-nsresult
-nsTemplateRule::AddBinding(nsAtom* aSourceVariable,
-                           nsAString& aExpr,
-                           nsAtom* aTargetVariable)
-{
-    NS_PRECONDITION(aSourceVariable != 0, "no source variable!");
-    if (! aSourceVariable)
-        return NS_ERROR_INVALID_ARG;
-
-    NS_PRECONDITION(aTargetVariable != 0, "no target variable!");
-    if (! aTargetVariable)
-        return NS_ERROR_INVALID_ARG;
-
-    NS_ASSERTION(! HasBinding(aSourceVariable, aExpr, aTargetVariable),
-                 "binding added twice");
-
-    Binding* newbinding = new Binding;
-    if (! newbinding)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    newbinding->mSourceVariable = aSourceVariable;
-    newbinding->mTargetVariable = aTargetVariable;
-    newbinding->mParent         = nullptr;
-
-    newbinding->mExpr.Assign(aExpr);
-
-    Binding* binding = mBindings;
-    Binding** link = &mBindings;
-
-    // Insert it at the end, unless we detect that an existing
-    // binding's source is dependent on the newbinding's target.
-    //
-    // XXXwaterson this isn't enough to make sure that we get all of
-    // the dependencies worked out right, but it'll do for now. For
-    // example, if you have (ab, bc, cd), and insert them in the order
-    // (cd, ab, bc), you'll get (bc, cd, ab). The good news is, if the
-    // person uses a natural ordering when writing the XUL, it'll all
-    // work out ok.
-    while (binding) {
-        if (binding->mSourceVariable == newbinding->mTargetVariable) {
-            binding->mParent = newbinding;
-            break;
-        }
-        else if (binding->mTargetVariable == newbinding->mSourceVariable) {
-            newbinding->mParent = binding;
-        }
-
-        link = &binding->mNext;
-        binding = binding->mNext;
-    }
-
-    // Insert the newbinding
-    *link = newbinding;
-    newbinding->mNext = binding;
-    return NS_OK;
-}
-
-nsresult
-nsTemplateRule::AddBindingsToQueryProcessor(nsIXULTemplateQueryProcessor* aProcessor)
-{
-    Binding* binding = mBindings;
-
-    while (binding) {
-        nsresult rv = aProcessor->AddBinding(mRuleNode, binding->mTargetVariable,
-                                             binding->mSourceVariable, binding->mExpr);
-        if (NS_FAILED(rv)) return rv;
-
-        binding = binding->mNext;
-    }
-
-    return NS_OK;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsTemplateRule.h
+++ /dev/null
@@ -1,328 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsTemplateRule_h__
-#define nsTemplateRule_h__
-
-#include "nsCOMPtr.h"
-#include "nsAtom.h"
-#include "nsIRDFDataSource.h"
-#include "nsIRDFResource.h"
-#include "nsIContent.h"
-#include "nsIDOMNode.h"
-#include "nsTArray.h"
-#include "nsString.h"
-#include "nsIXULTemplateRuleFilter.h"
-#include "nsCycleCollectionParticipant.h"
-
-class nsIXULTemplateQueryProcessor;
-class nsTemplateQuerySet;
-
-class nsTemplateCondition
-{
-public:
-    // relations that may be used in a rule. They may be negated with the
-    // negate flag. Less and Greater are used for numeric comparisons and
-    // Before and After are used for string comparisons. For Less, Greater,
-    // Before, After, Startswith, Endswith, and Contains, the source is
-    // conceptually on the left of the relation and the target is on the
-    // right. For example, if the relation is Contains, that means Match if
-    // the source contains the target.
-    enum ConditionRelation {
-        eUnknown,
-        eEquals,
-        eLess,
-        eGreater,
-        eBefore,
-        eAfter,
-        eStartswith,
-        eEndswith,
-        eContains
-    };
-
-    nsTemplateCondition(nsAtom* aSourceVariable,
-                        const nsAString& aRelation,
-                        nsAtom* aTargetVariable,
-                        bool mIgnoreCase,
-                        bool mNegate);
-
-    nsTemplateCondition(nsAtom* aSourceVariable,
-                        const nsAString& aRelation,
-                        const nsAString& aTargets,
-                        bool mIgnoreCase,
-                        bool mNegate,
-                        bool aIsMultiple);
-
-    nsTemplateCondition(const nsAString& aSource,
-                        const nsAString& aRelation,
-                        nsAtom* aTargetVariable,
-                        bool mIgnoreCase,
-                        bool mNegate);
-
-    ~nsTemplateCondition() { MOZ_COUNT_DTOR(nsTemplateCondition); }
-
-    nsTemplateCondition* GetNext() { return mNext; }
-    void SetNext(nsTemplateCondition* aNext) { mNext = aNext; }
-
-    void SetRelation(const nsAString& aRelation);
-
-    bool
-    CheckMatch(nsIXULTemplateResult* aResult);
-
-    bool
-    CheckMatchStrings(const nsAString& aLeftString,
-                      const nsAString& aRightString);
-protected:
-
-    RefPtr<nsAtom>   mSourceVariable;
-    nsString            mSource;
-    ConditionRelation   mRelation;
-    RefPtr<nsAtom>   mTargetVariable;
-    nsTArray<nsString>  mTargetList;
-    bool                mIgnoreCase;
-    bool                mNegate;
-
-   nsTemplateCondition* mNext;
-};
-
-/**
- * A rule consists of:
- *
- * - Conditions, a set of unbound variables with consistency
- *   constraints that specify the values that each variable can
- *   assume. The conditions must be completely and consistently
- *   "bound" for the rule to be considered "matched".
- *
- * - Bindings, a set of unbound variables with consistency constraints
- *   that specify the values that each variable can assume. Unlike the
- *   conditions, the bindings need not be bound for the rule to be
- *   considered matched.
- *
- * - Content that should be constructed when the rule is "activated".
- *
- */
-class nsTemplateRule
-{
-public:
-    nsTemplateRule(nsIContent* aRuleNode,
-                   nsIContent* aAction,
-                   nsTemplateQuerySet* aQuerySet);
-    /**
-     * The copy-constructor should only be called from nsTArray when appending
-     * a new rule, otherwise things break because the copy constructor expects
-     * mBindings and mConditions to be nullptr.
-     */
-    nsTemplateRule(const nsTemplateRule& aOtherRule);
-
-    ~nsTemplateRule();
-
-    /**
-     * Return the <action> node that this rule was constructed from, or its
-     * logical equivalent for shorthand syntaxes. That is, the parent node of
-     * the content that should be generated for this rule.
-     */
-    nsIContent* GetAction() const { return mAction; }
-
-    /**
-     * Return the <rule> content node that this rule was constructed from.
-     * @param aResult an out parameter, which will contain the rule node
-     * @return NS_OK if no errors occur.
-     */
-    nsresult GetRuleNode(nsIDOMNode** aResult) const;
-
-    void SetVars(nsAtom* aRefVariable, nsAtom* aMemberVariable)
-    {
-        mRefVariable = aRefVariable;
-        mMemberVariable = aMemberVariable;
-    }
-
-    void SetRuleFilter(nsIXULTemplateRuleFilter* aRuleFilter)
-    {
-        mRuleFilter = aRuleFilter;
-    }
-
-    nsAtom* GetTag() { return mTag; }
-    void SetTag(nsAtom* aTag) { mTag = aTag; }
-
-    nsAtom* GetMemberVariable() { return mMemberVariable; }
-
-    /**
-     * Set the first condition for the rule. Other conditions are linked
-     * to it using the condition's SetNext method.
-     */
-    void SetCondition(nsTemplateCondition* aConditions);
-
-    /**
-     * Check if the result matches the rule by first looking at the conditions.
-     * If the results is accepted by the conditions, the rule filter, if any
-     * was set, is checked. If either check rejects a result, a match cannot
-     * occur for this rule and result.
-     */
-    bool
-    CheckMatch(nsIXULTemplateResult* aResult) const;
-
-    /**
-     * Determine if the rule has the specified binding
-     */
-    bool
-    HasBinding(nsAtom* aSourceVariable,
-               nsAString& aExpr,
-               nsAtom* aTargetVariable) const;
-
-    /**
-     * Add a binding to the rule. A binding consists of an already-bound
-     * source variable, and the RDF property that should be tested to
-     * generate a target value. The target value is bound to a target
-     * variable.
-     *
-     * @param aSourceVariable the source variable that will be used in
-     *   the RDF query.
-     * @param aExpr the expression that will be used in the query.
-     * @param aTargetVariable the variable whose value will be bound
-     *   to the RDF node that is returned when querying the binding
-     * @return NS_OK if no errors occur.
-     */
-    nsresult AddBinding(nsAtom* aSourceVariable,
-                        nsAString& aExpr,
-                        nsAtom* aTargetVariable);
-
-    /**
-     * Inform the query processor of the bindings that are set for a rule.
-     * This should be called after all the bindings for a rule are compiled.
-     */
-    nsresult
-    AddBindingsToQueryProcessor(nsIXULTemplateQueryProcessor* aProcessor);
-
-    void Traverse(nsCycleCollectionTraversalCallback &cb) const
-    {
-        cb.NoteXPCOMChild(mRuleNode);
-        cb.NoteXPCOMChild(mAction);
-    }
-
-protected:
-
-    struct Binding {
-        RefPtr<nsAtom>        mSourceVariable;
-        RefPtr<nsAtom>        mTargetVariable;
-        nsString                 mExpr;
-        Binding*                 mNext;
-        Binding*                 mParent;
-    };
-
-    // backreference to the query set which owns this rule
-    nsTemplateQuerySet* mQuerySet;
-
-    // the <rule> node, or the <template> node if there is no <rule>
-    nsCOMPtr<nsIDOMNode> mRuleNode;
-
-    // the <action> node, or, if there is no <action>, the container node
-    // which contains the content to generate
-    nsCOMPtr<nsIContent> mAction;
-
-    // the rule filter set by the builder's SetRuleFilter function
-    nsCOMPtr<nsIXULTemplateRuleFilter> mRuleFilter;
-
-    // indicates that the rule will only match when generating content
-    // to be inserted into a container with this tag
-    RefPtr<nsAtom> mTag;
-
-    // linked-list of the bindings for the rule, owned by the rule.
-    Binding* mBindings;
-
-    RefPtr<nsAtom> mRefVariable;
-    RefPtr<nsAtom> mMemberVariable;
-
-    nsTemplateCondition* mConditions; // owned by nsTemplateRule
-};
-
-/** nsTemplateQuerySet
- *
- *  A single <queryset> which holds the query node and the rules for it.
- *  All builders have at least one queryset, which may be created with an
- *  explicit <queryset> tag or implied if the tag is not used.
- *
- *  These queryset objects are created and owned by the builder in its
- *  mQuerySets array.
- */
-class nsTemplateQuerySet
-{
-protected:
-    nsTArray<nsTemplateRule> mRules;
-
-    // a number which increments for each successive queryset. It is stored so
-    // it can be used as an optimization when updating results so that it is
-    // known where to insert them into a match.
-    int32_t mPriority;
-
-public:
-
-    // <query> node
-    nsCOMPtr<nsIContent> mQueryNode;
-
-    // compiled opaque query object returned by the query processor's
-    // CompileQuery call
-    nsCOMPtr<nsISupports> mCompiledQuery;
-
-    // indicates that the query will only generate content to be inserted into
-    // a container with this tag
-    RefPtr<nsAtom> mTag;
-
-    explicit nsTemplateQuerySet(int32_t aPriority)
-        : mPriority(aPriority)
-    {
-        MOZ_COUNT_CTOR(nsTemplateQuerySet);
-    }
-
-    ~nsTemplateQuerySet()
-    {
-        MOZ_COUNT_DTOR(nsTemplateQuerySet);
-    }
-
-    int32_t Priority() const
-    {
-        return mPriority;
-    }
-
-    nsAtom* GetTag() { return mTag; }
-    void SetTag(nsAtom* aTag) { mTag = aTag; }
-
-    nsTemplateRule* NewRule(nsIContent* aRuleNode,
-                            nsIContent* aAction,
-                            nsTemplateQuerySet* aQuerySet)
-    {
-        // nsTemplateMatch stores the index as a 16-bit value,
-        // so check to make sure for overflow
-        if (mRules.Length() == INT16_MAX)
-            return nullptr;
-
-        return mRules.AppendElement(nsTemplateRule(aRuleNode, aAction,
-                                    aQuerySet));
-    }
-
-    void RemoveRule(nsTemplateRule *aRule)
-    {
-        mRules.RemoveElementAt(aRule - mRules.Elements());
-    }
-
-    int16_t RuleCount() const
-    {
-        return mRules.Length();
-    }
-
-    nsTemplateRule* GetRuleAt(int16_t aIndex)
-    {
-        if (uint32_t(aIndex) < mRules.Length()) {
-            return &mRules[aIndex];
-        }
-        return nullptr;
-    }
-
-    void Clear()
-    {
-        mRules.Clear();
-    }
-};
-
-#endif // nsTemplateRule_h__
deleted file mode 100644
--- a/dom/xul/templates/nsTreeRows.cpp
+++ /dev/null
@@ -1,482 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsString.h"
-#include "nsTreeRows.h"
-#include <algorithm>
-
-nsTreeRows::Subtree*
-nsTreeRows::EnsureSubtreeFor(Subtree* aParent,
-                             int32_t aChildIndex)
-{
-    Subtree* subtree = GetSubtreeFor(aParent, aChildIndex);
-
-    if (! subtree) {
-        subtree = aParent->mRows[aChildIndex].mSubtree = new Subtree(aParent);
-        InvalidateCachedRow();
-    }
-
-    return subtree;
-}
-
-nsTreeRows::Subtree*
-nsTreeRows::GetSubtreeFor(const Subtree* aParent,
-                              int32_t aChildIndex,
-                              int32_t* aSubtreeSize)
-{
-    NS_PRECONDITION(aParent, "no parent");
-    NS_PRECONDITION(aChildIndex >= 0, "bad child index");
-
-    Subtree* result = nullptr;
-
-    if (aChildIndex < aParent->mCount)
-        result = aParent->mRows[aChildIndex].mSubtree;
-
-    if (aSubtreeSize)
-        *aSubtreeSize = result ? result->mSubtreeSize : 0;
-
-    return result;
-}
-
-void
-nsTreeRows::RemoveSubtreeFor(Subtree* aParent, int32_t aChildIndex)
-{
-    NS_PRECONDITION(aParent, "no parent");
-    NS_PRECONDITION(aChildIndex >= 0 && aChildIndex < aParent->mCount, "bad child index");
-
-    Row& row = aParent->mRows[aChildIndex];
-
-    if (row.mSubtree) {
-        int32_t subtreeSize = row.mSubtree->GetSubtreeSize();
-
-        delete row.mSubtree;
-        row.mSubtree = nullptr;
-
-        for (Subtree* subtree = aParent; subtree != nullptr; subtree = subtree->mParent)
-            subtree->mSubtreeSize -= subtreeSize;
-    }
-
-    InvalidateCachedRow();
-}
-
-nsTreeRows::iterator
-nsTreeRows::First()
-{
-    iterator result;
-    result.Append(&mRoot, 0);
-    result.SetRowIndex(0);
-    return result;
-}
-
-nsTreeRows::iterator
-nsTreeRows::Last()
-{
-    iterator result;
-
-    // Build up a path along the rightmost edge of the tree
-    Subtree* current = &mRoot;
-    int32_t count = current->Count();
-    do  {
-        int32_t last = count - 1;
-        result.Append(current, last);
-        current = count ? GetSubtreeFor(current, last) : nullptr;
-    } while (current && ((count = current->Count()) != 0));
-
-    // Now, at the bottom rightmost leaf, advance us one off the end.
-    result.GetTop().mChildIndex++;
-
-    // Our row index will be the size of the root subree, plus one.
-    result.SetRowIndex(mRoot.GetSubtreeSize() + 1);
-
-    return result;
-}
-
-nsTreeRows::iterator
-nsTreeRows::operator[](int32_t aRow)
-{
-    // See if we're just lucky, and end up with something
-    // nearby. (This tends to happen a lot due to the way that we get
-    // asked for rows n' stuff.)
-    int32_t last = mLastRow.GetRowIndex();
-    if (last != -1) {
-        if (aRow == last)
-            return mLastRow;
-        else if (last + 1 == aRow)
-            return ++mLastRow;
-        else if (last - 1 == aRow)
-            return --mLastRow;
-    }
-
-    // Nope. Construct a path to the specified index. This is a little
-    // bit better than O(n), because we can skip over subtrees. (So it
-    // ends up being approximately linear in the subtree size, instead
-    // of the entire view size. But, most of the time, big views are
-    // flat. Oh well.)
-    iterator result;
-    Subtree* current = &mRoot;
-
-    int32_t index = 0;
-    result.SetRowIndex(aRow);
-
-    do {
-        int32_t subtreeSize;
-        Subtree* subtree = GetSubtreeFor(current, index, &subtreeSize);
-
-        if (subtreeSize >= aRow) {
-            result.Append(current, index);
-            current = subtree;
-            index = 0;
-            --aRow;
-        }
-        else {
-            ++index;
-            aRow -= subtreeSize + 1;
-        }
-    } while (aRow >= 0);
-
-    mLastRow = result;
-    return result;
-}
-
-nsTreeRows::iterator
-nsTreeRows::FindByResource(nsIRDFResource* aResource)
-{
-    // XXX Mmm, scan through the rows one-by-one...
-    iterator last = Last();
-    iterator iter;
-
-    nsresult rv;
-    nsAutoString resourceid;
-    bool stringmode = false;
-
-    for (iter = First(); iter != last; ++iter) {
-        if (!stringmode) {
-            nsCOMPtr<nsIRDFResource> findres;
-            rv = iter->mMatch->mResult->GetResource(getter_AddRefs(findres));
-            if (NS_FAILED(rv)) return last;
-
-            if (findres == aResource)
-                break;
-
-            if (! findres) {
-                const char *uri;
-                aResource->GetValueConst(&uri);
-                CopyUTF8toUTF16(uri, resourceid);
-
-                // set stringmode and fall through
-                stringmode = true;
-            }
-        }
-
-        // additional check because previous block could change stringmode
-        if (stringmode) {
-            nsAutoString findid;
-            rv = iter->mMatch->mResult->GetId(findid);
-            if (NS_FAILED(rv)) return last;
-
-            if (resourceid.Equals(findid))
-                break;
-        }
-    }
-
-    return iter;
-}
-
-nsTreeRows::iterator
-nsTreeRows::Find(nsIXULTemplateResult *aResult)
-{
-    // XXX Mmm, scan through the rows one-by-one...
-    iterator last = Last();
-    iterator iter;
-
-    for (iter = First(); iter != last; ++iter) {
-        if (aResult == iter->mMatch->mResult)
-          break;
-    }
-
-    return iter;
-}
-
-void
-nsTreeRows::Clear()
-{
-    mRoot.Clear();
-    InvalidateCachedRow();
-}
-
-//----------------------------------------------------------------------
-//
-// nsTreeRows::Subtree
-//
-
-nsTreeRows::Subtree::~Subtree()
-{
-    Clear();
-}
-
-void
-nsTreeRows::Subtree::Clear()
-{
-    for (int32_t i = mCount - 1; i >= 0; --i)
-        delete mRows[i].mSubtree;
-
-    delete[] mRows;
-
-    mRows = nullptr;
-    mCount = mCapacity = mSubtreeSize = 0;
-}
-
-nsTreeRows::iterator
-nsTreeRows::Subtree::InsertRowAt(nsTemplateMatch* aMatch, int32_t aIndex)
-{
-    if (mCount >= mCapacity || aIndex >= mCapacity) {
-        int32_t newCapacity = std::max(mCapacity * 2, aIndex + 1);
-        Row* newRows = new Row[newCapacity];
-        if (! newRows)
-            return iterator();
-
-        for (int32_t i = mCount - 1; i >= 0; --i)
-            newRows[i] = mRows[i];
-
-        delete[] mRows;
-
-        mRows = newRows;
-        mCapacity = newCapacity;
-    }
-
-    for (int32_t i = mCount - 1; i >= aIndex; --i)
-        mRows[i + 1] = mRows[i];
-
-    mRows[aIndex].mMatch = aMatch;
-    mRows[aIndex].mContainerType = eContainerType_Unknown;
-    mRows[aIndex].mContainerState = eContainerState_Unknown;
-    mRows[aIndex].mContainerFill = eContainerFill_Unknown;
-    mRows[aIndex].mSubtree = nullptr;
-    ++mCount;
-
-    // Now build an iterator that points to the newly inserted element.
-    int32_t rowIndex = 0;
-    iterator result;
-    result.Push(this, aIndex);
-
-    for ( ; --aIndex >= 0; ++rowIndex) {
-        // Account for open subtrees in the absolute row index.
-        const Subtree *subtree = mRows[aIndex].mSubtree;
-        if (subtree)
-            rowIndex += subtree->mSubtreeSize;
-    }
-
-    Subtree *subtree = this;
-    do {
-        // Note that the subtree's size has expanded.
-        ++subtree->mSubtreeSize;
-
-        Subtree *parent = subtree->mParent;
-        if (! parent)
-            break;
-
-        // Account for open subtrees in the absolute row index.
-        int32_t count = parent->Count();
-        for (aIndex = 0; aIndex < count; ++aIndex, ++rowIndex) {
-            const Subtree *child = (*parent)[aIndex].mSubtree;
-            if (subtree == child)
-                break;
-
-            if (child)
-                rowIndex += child->mSubtreeSize;
-        }
-
-        NS_ASSERTION(aIndex < count, "couldn't find subtree in parent");
-
-        result.Push(parent, aIndex);
-        subtree = parent;
-        ++rowIndex; // One for the parent row.
-    } while (1);
-
-    result.SetRowIndex(rowIndex);
-    return result;
-}
-
-void
-nsTreeRows::Subtree::RemoveRowAt(int32_t aIndex)
-{
-    NS_PRECONDITION(aIndex >= 0 && aIndex < Count(), "bad index");
-    if (aIndex < 0 || aIndex >= Count())
-        return;
-
-    // How big is the subtree we're going to be removing?
-    int32_t subtreeSize = mRows[aIndex].mSubtree
-        ? mRows[aIndex].mSubtree->GetSubtreeSize()
-        : 0;
-
-    ++subtreeSize;
-
-    delete mRows[aIndex].mSubtree;
-
-    for (int32_t i = aIndex + 1; i < mCount; ++i)
-        mRows[i - 1] = mRows[i];
-
-    --mCount;
-
-    for (Subtree* subtree = this; subtree != nullptr; subtree = subtree->mParent)
-        subtree->mSubtreeSize -= subtreeSize;
-}
-
-//----------------------------------------------------------------------
-//
-// nsTreeRows::iterator
-//
-
-nsTreeRows::iterator::iterator(const iterator& aIterator)
-    : mRowIndex(aIterator.mRowIndex),
-      mLink(aIterator.mLink)
-{
-}
-
-nsTreeRows::iterator&
-nsTreeRows::iterator::operator=(const iterator& aIterator)
-{
-    mRowIndex = aIterator.mRowIndex;
-    mLink = aIterator.mLink;
-    return *this;
-}
-
-void
-nsTreeRows::iterator::Append(Subtree* aParent, int32_t aChildIndex)
-{
-    Link *link = mLink.AppendElement();
-    if (link) {
-        link->mParent     = aParent;
-        link->mChildIndex = aChildIndex;
-    }
-    else
-        NS_ERROR("out of memory");
-}
-
-void
-nsTreeRows::iterator::Push(Subtree *aParent, int32_t aChildIndex)
-{
-    Link *link = mLink.InsertElementAt(0);
-    if (link) {
-        link->mParent     = aParent;
-        link->mChildIndex = aChildIndex;
-    }
-    else
-        NS_ERROR("out of memory");
-}
-
-bool
-nsTreeRows::iterator::operator==(const iterator& aIterator) const
-{
-    if (GetDepth() != aIterator.GetDepth())
-        return false;
-
-    if (GetDepth() == 0)
-        return true;
-
-    return GetTop() == aIterator.GetTop();
-}
-
-void
-nsTreeRows::iterator::Next()
-{
-    NS_PRECONDITION(GetDepth() > 0, "cannot increment an uninitialized iterator");
-
-    // Increment the absolute row index
-    ++mRowIndex;
-
-    Link& top = GetTop();
-
-    // Is there a child subtree? If so, descend into the child
-    // subtree.
-    Subtree* subtree = top.GetRow().mSubtree;
-
-    if (subtree && subtree->Count()) {
-        Append(subtree, 0);
-        return;
-    }
-
-    // Have we exhausted the current subtree?
-    if (top.mChildIndex >= top.mParent->Count() - 1) {
-        // Yep. See if we've just iterated path the last element in
-        // the tree, period. Walk back up the stack, looking for any
-        // unfinished subtrees.
-        int32_t unfinished;
-        for (unfinished = GetDepth() - 2; unfinished >= 0; --unfinished) {
-            const Link& link = mLink[unfinished];
-            if (link.mChildIndex < link.mParent->Count() - 1)
-                break;
-        }
-
-        // If there are no unfinished subtrees in the stack, then this
-        // iterator is exhausted. Leave it in the same state that
-        // Last() does.
-        if (unfinished < 0) {
-            top.mChildIndex++;
-            return;
-        }
-
-        // Otherwise, we ran off the end of one of the inner
-        // subtrees. Pop up to the next unfinished level in the stack.
-        mLink.SetLength(unfinished + 1);
-    }
-
-    // Advance to the next child in this subtree
-    ++(GetTop().mChildIndex);
-}
-
-void
-nsTreeRows::iterator::Prev()
-{
-    NS_PRECONDITION(GetDepth() > 0, "cannot increment an uninitialized iterator");
-
-    // Decrement the absolute row index
-    --mRowIndex;
-
-    // Move to the previous child in this subtree
-    --(GetTop().mChildIndex);
-
-    // Have we exhausted the current subtree?
-    if (GetTop().mChildIndex < 0) {
-        // Yep. See if we've just iterated back to the first element
-        // in the tree, period. Walk back up the stack, looking for
-        // any unfinished subtrees.
-        int32_t unfinished;
-        for (unfinished = GetDepth() - 2; unfinished >= 0; --unfinished) {
-            const Link& link = mLink[unfinished];
-            if (link.mChildIndex >= 0)
-                break;
-        }
-
-        // If there are no unfinished subtrees in the stack, then this
-        // iterator is exhausted. Leave it in the same state that
-        // First() does.
-        if (unfinished < 0)
-            return;
-
-        // Otherwise, we ran off the end of one of the inner
-        // subtrees. Pop up to the next unfinished level in the stack.
-        mLink.SetLength(unfinished + 1);
-        return;
-    }
-
-    // Is there a child subtree immediately prior to our current
-    // position? If so, descend into it, grovelling down to the
-    // deepest, rightmost left edge.
-    Subtree* parent = GetTop().GetParent();
-    int32_t index = GetTop().GetChildIndex();
-
-    Subtree* subtree = (*parent)[index].mSubtree;
-
-    if (subtree && subtree->Count()) {
-        do {
-            index = subtree->Count() - 1;
-            Append(subtree, index);
-
-            parent = subtree;
-            subtree = (*parent)[index].mSubtree;
-        } while (subtree && subtree->Count());
-    }
-}
deleted file mode 100644
--- a/dom/xul/templates/nsTreeRows.h
+++ /dev/null
@@ -1,437 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsTreeRows_h__
-#define nsTreeRows_h__
-
-#include "nsCOMPtr.h"
-#include "nsTArray.h"
-#include "PLDHashTable.h"
-#include "nsIXULTemplateResult.h"
-#include "nsIRDFResource.h"
-
-class nsTemplateMatch;
-
-/**
- * This class maintains the state of the XUL tree builder's
- * rows. It maps a row number to the nsTemplateMatch object that
- * populates the row.
- */
-class nsTreeRows
-{
-public:
-    class iterator;
-    friend class iterator;
-
-    enum Direction { eDirection_Forwards = +1, eDirection_Backwards = -1 };
-
-    enum ContainerType {
-        eContainerType_Unknown      =  0,
-        eContainerType_Noncontainer =  1,
-        eContainerType_Container    =  2
-    };
-
-    enum ContainerState {
-        eContainerState_Unknown     =  0,
-        eContainerState_Open        =  1,
-        eContainerState_Closed      =  2
-    };
-
-    enum ContainerFill {
-        eContainerFill_Unknown      =  0,
-        eContainerFill_Empty        =  1,
-        eContainerFill_Nonempty     =  2
-    };
-
-    class Subtree;
-
-    /**
-     * A row in the tree. Contains the match that the row
-     * corresponds to, and a pointer to the row's subtree, if there
-     * are any.
-     */
-    struct Row {
-        nsTemplateMatch* mMatch;
-        ContainerType    mContainerType  : 4;
-        ContainerState   mContainerState : 4;
-        ContainerFill    mContainerFill  : 4;
-
-        Subtree*         mSubtree; // XXX eventually move to hashtable
-    };
-
-    /**
-     * A subtree in the tree. A subtree contains rows, which may
-     * contain other subtrees.
-     */
-    class Subtree {
-    protected:
-        friend class nsTreeRows; // so that it can access members, for now
-
-        /**
-         * The parent subtree; null if we're the root
-         */
-        Subtree* mParent;
-
-        /**
-         * The number of immediate children in this subtree
-         */
-        int32_t mCount;
-
-        /**
-         * The capacity of the subtree
-         */
-        int32_t mCapacity;
-
-        /**
-         * The total number of rows in this subtree, recursively
-         * including child subtrees.
-         */
-        int32_t mSubtreeSize;
-
-        /**
-         * The array of rows in the subtree
-         */
-        Row* mRows;
-
-    public:
-        /**
-         * Creates a subtree with the specified parent.
-         */
-        explicit Subtree(Subtree* aParent)
-            : mParent(aParent),
-              mCount(0),
-              mCapacity(0),
-              mSubtreeSize(0),
-              mRows(nullptr) {}
-
-        ~Subtree();
-
-        /**
-         * Return the number of immediate child rows in the subtree
-         */
-        int32_t Count() const { return mCount; }
-
-        /**
-         * Return the number of rows in this subtree, as well as all
-         * the subtrees it contains.
-         */
-        int32_t GetSubtreeSize() const { return mSubtreeSize; }
-
-        /**
-         * Retrieve the immediate child row at the specified index.
-         */
-        const Row& operator[](int32_t aIndex) const {
-            NS_PRECONDITION(aIndex >= 0 && aIndex < mCount, "bad index");
-            return mRows[aIndex]; }
-
-        /**
-         * Retrieve the immediate row at the specified index.
-         */
-        Row& operator[](int32_t aIndex) {
-            NS_PRECONDITION(aIndex >= 0 && aIndex < mCount, "bad index");
-            return mRows[aIndex]; }
-
-        /**
-         * Remove all rows from the subtree.
-         */
-        void Clear();
-
-    protected:
-        /**
-         * Insert an immediate child row at the specified index.
-         */
-        iterator InsertRowAt(nsTemplateMatch* aMatch, int32_t aIndex);
-
-        /**
-         * Remove an immediate child row from the specified index.
-         */
-        void RemoveRowAt(int32_t aChildIndex);
-    };
-
-    friend class Subtree;
-
-protected:
-    /**
-     * A link in the path through the view's tree.
-     */
-    struct Link {
-        Subtree* mParent;
-        int32_t  mChildIndex;
-
-        Link&
-        operator=(const Link& aLink) {
-            mParent = aLink.mParent;
-            mChildIndex = aLink.mChildIndex;
-            return *this; }
-
-        bool
-        operator==(const Link& aLink) const {
-            return (mParent == aLink.mParent)
-                && (mChildIndex == aLink.mChildIndex); }
-
-        Subtree* GetParent() { return mParent; }
-        const Subtree* GetParent() const { return mParent; }
-
-        int32_t GetChildIndex() const { return mChildIndex; }
-
-        Row& GetRow() { return (*mParent)[mChildIndex]; }
-        const Row& GetRow() const { return (*mParent)[mChildIndex]; }
-    };
-
-public:
-    /**
-     * An iterator that can be used to traverse the tree view.
-     */
-    class iterator {
-    protected:
-        int32_t mRowIndex;
-        AutoTArray<Link, 8> mLink;
-
-        void Next();
-        void Prev();
-
-        friend class Subtree; // so InsertRowAt can initialize us
-        friend class nsTreeRows; // so nsTreeRows can initialize us
-
-        /**
-         * Used by operator[]() to initialize an iterator.
-         */
-        void Append(Subtree* aParent, int32_t aChildIndex);
-
-        /**
-         * Used by InsertRowAt() to initialize an iterator.
-         */
-        void Push(Subtree *aParent, int32_t aChildIndex);
-
-        /**
-         * Used by operator[]() and InsertRowAt() to initialize an iterator.
-         */
-        void SetRowIndex(int32_t aRowIndex) { mRowIndex = aRowIndex; }
-
-        /**
-         * Handy accessors to the top element.
-         */
-        Link& GetTop() { return mLink[mLink.Length() - 1]; }
-        const Link& GetTop() const { return mLink[mLink.Length() - 1]; }
-
-    public:
-        iterator() : mRowIndex(-1) {}
-
-        iterator(const iterator& aIterator);
-        iterator& operator=(const iterator& aIterator);
-
-        bool operator==(const iterator& aIterator) const;
-
-        bool operator!=(const iterator& aIterator) const {
-            return !aIterator.operator==(*this); }
-
-        const Row& operator*() const { return GetTop().GetRow(); }
-        Row& operator*() { return GetTop().GetRow(); }
-
-        const Row* operator->() const { return &(GetTop().GetRow()); }
-        Row* operator->() { return &(GetTop().GetRow()); }
-
-        iterator& operator++() { Next(); return *this; }
-        iterator operator++(int) { iterator temp(*this); Next(); return temp; }
-        iterator& operator--() { Prev(); return *this; }
-        iterator operator--(int) { iterator temp(*this); Prev(); return temp; }
-
-        /**
-         * Return the current parent link
-         */
-        Subtree* GetParent() { return GetTop().GetParent(); }
-
-        const Subtree* GetParent() const { return GetTop().GetParent(); }
-
-        /**
-         * Return the current child index
-         */
-        int32_t GetChildIndex() const { return GetTop().GetChildIndex(); }
-
-        /**
-         * Return the depth of the path the iterator is maintaining
-         * into the tree.
-         */
-        int32_t GetDepth() const { return mLink.Length(); }
-
-        /**
-         * Return the current row index of the iterator
-         */
-        int32_t GetRowIndex() const { return mRowIndex; }
-
-        /**
-         * Pop the iterator up a level.
-         */
-        iterator& Pop() { mLink.SetLength(GetDepth() - 1); return *this; }
-    };
-
-    /**
-     * Retrieve the first element in the view
-     */
-    iterator First();
-
-    /**
-     * Retrieve (one past) the last element in the view
-     */
-    iterator Last();
-
-    /**
-     * Find the row that contains the given resource
-     */
-    iterator FindByResource(nsIRDFResource* aResource);
-
-    /**
-     * Find the row that contains the result
-     */
-    iterator Find(nsIXULTemplateResult* aResult);
-
-    /**
-     * Retrieve the ith element in the view
-     */
-    iterator operator[](int32_t aIndex);
-
-    nsTreeRows() : mRoot(nullptr) {}
-    ~nsTreeRows() {}
-
-    /**
-     * Ensure that a child subtree exists within the specified parent
-     * at the specified child index within the parent. (In other
-     * words, create a subtree if one doesn't already exist.)
-     */
-    Subtree*
-    EnsureSubtreeFor(Subtree* aParent, int32_t aChildIndex);
-
-    /**
-     * Ensure that a child subtree exists at the iterator's position.
-     */
-    Subtree*
-    EnsureSubtreeFor(iterator& aIterator) {
-        return EnsureSubtreeFor(aIterator.GetParent(),
-                                aIterator.GetChildIndex()); }
-
-    /**
-     * Get the child subtree for the specified parent at the specified
-     * child index. Optionally return the child subtree's size. Will
-     * return `null' if no subtree exists.
-     */
-    Subtree*
-    GetSubtreeFor(const Subtree* aParent,
-                  int32_t aChildIndex,
-                  int32_t* aSubtreeSize = nullptr);
-
-    /**
-     * Retrieve the size of the subtree within the specified parent.
-     */
-    int32_t
-    GetSubtreeSizeFor(const Subtree* aParent,
-                      int32_t aChildIndex) {
-        int32_t size;
-        GetSubtreeFor(aParent, aChildIndex, &size);
-        return size; }
-
-    /**
-     * Retrieve the size of the subtree within the specified parent.
-     */
-    int32_t
-    GetSubtreeSizeFor(const iterator& aIterator) {
-        int32_t size;
-        GetSubtreeFor(aIterator.GetParent(), aIterator.GetChildIndex(), &size);
-        return size; }
-
-    /**
-     * Remove the specified subtree for a row, leaving the row itself
-     * intact.
-     */
-    void
-    RemoveSubtreeFor(Subtree* aParent, int32_t aChildIndex);
-
-    /**
-     * Remove the specified subtree for a row, leaving the row itself
-     * intact.
-     */
-    void
-    RemoveSubtreeFor(iterator& aIterator) {
-        RemoveSubtreeFor(aIterator.GetParent(), aIterator.GetChildIndex()); }
-
-    /**
-     * Remove the specified row from the view
-     */
-    int32_t
-    RemoveRowAt(iterator& aIterator) {
-        iterator temp = aIterator--;
-        Subtree* parent = temp.GetParent();
-        parent->RemoveRowAt(temp.GetChildIndex());
-        InvalidateCachedRow();
-        return parent->Count(); }
-
-    /**
-     * Insert a new match into the view
-     */
-    iterator
-    InsertRowAt(nsTemplateMatch* aMatch, Subtree* aSubtree, int32_t aChildIndex) {
-        InvalidateCachedRow();
-        return aSubtree->InsertRowAt(aMatch, aChildIndex); }
-
-    /**
-     * Raw access to the rows; e.g., for sorting.
-     */
-    Row*
-    GetRowsFor(Subtree* aSubtree) { return aSubtree->mRows; }
-
-    /**
-     * Remove all of the rows
-     */
-    void Clear();
-
-    /**
-     * Return the total number of rows in the tree view.
-     */
-    int32_t Count() const { return mRoot.GetSubtreeSize(); }
-
-    /**
-     * Retrieve the root subtree
-     */
-    Subtree* GetRoot() { return &mRoot; }
-
-    /**
-     * Set the root resource for the view
-     */
-    void SetRootResource(nsIRDFResource* aResource) {
-        mRootResource = aResource; }
-
-    /**
-     * Retrieve the root resource for the view
-     */
-    nsIRDFResource* GetRootResource() {
-        return mRootResource.get(); }
-
-    /**
-     * Invalidate the cached row; e.g., because the view has changed
-     * in a way that would corrupt the iterator.
-     */
-    void
-    InvalidateCachedRow() { mLastRow = iterator(); }
-
-protected:
-    /**
-     * The root subtree.
-     */
-    Subtree mRoot;
-
-    /**
-     * The root resource for the view
-     */
-    nsCOMPtr<nsIRDFResource> mRootResource;
-
-    /**
-     * The last row that was asked for by operator[]. By remembering
-     * this, we can usually avoid the O(n) search through the row
-     * array to find the row at the specified index.
-     */
-    iterator mLastRow;
-};
-
-
-#endif // nsTreeRows_h__
deleted file mode 100644
--- a/dom/xul/templates/nsXMLBinding.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsXULTemplateQueryProcessorXML.h"
-#include "nsXULTemplateResultXML.h"
-#include "nsXMLBinding.h"
-#include "mozilla/ErrorResult.h"
-#include "mozilla/dom/XPathResult.h"
-
-using namespace mozilla;
-using namespace mozilla::dom;
-
-nsXMLBindingSet::~nsXMLBindingSet()
-{}
-
-void
-nsXMLBindingSet::AddBinding(nsAtom* aVar, nsAutoPtr<XPathExpression>&& aExpr)
-{
-  nsAutoPtr<nsXMLBinding> newbinding(new nsXMLBinding(aVar, Move(aExpr)));
-
-  if (mFirst) {
-    nsXMLBinding* binding = mFirst;
-
-    while (binding) {
-      // if the target variable is already used in a binding, ignore it
-      // since it won't be useful for anything
-      if (binding->mVar == aVar)
-        return;
-
-      // add the binding at the end of the list
-      if (!binding->mNext) {
-        binding->mNext = newbinding;
-        return;
-      }
-
-      binding = binding->mNext;
-    }
-  }
-  else {
-    mFirst = newbinding;
-  }
-}
-
-int32_t
-nsXMLBindingSet::LookupTargetIndex(nsAtom* aTargetVariable,
-                                   nsXMLBinding** aBinding)
-{
-  int32_t idx = 0;
-  nsXMLBinding* binding = mFirst;
-
-  while (binding) {
-    if (binding->mVar == aTargetVariable) {
-      *aBinding = binding;
-      return idx;
-    }
-    idx++;
-    binding = binding->mNext;
-  }
-
-  *aBinding = nullptr;
-  return -1;
-}
-
-XPathResult*
-nsXMLBindingValues::GetAssignmentFor(nsXULTemplateResultXML* aResult,
-                                     nsXMLBinding* aBinding,
-                                     int32_t aIndex,
-                                     uint16_t aType)
-{
-  XPathResult* value = mValues.SafeElementAt(aIndex);
-  if (value) {
-    return value;
-  }
-
-  nsINode* contextNode = aResult->Node();
-  if (!contextNode) {
-    return nullptr;
-  }
-
-  mValues.EnsureLengthAtLeast(aIndex + 1);
-
-  ErrorResult ignored;
-  mValues[aIndex] = aBinding->mExpr->Evaluate(*contextNode, aType, nullptr,
-                                              ignored);
-
-  return mValues[aIndex];
-}
-
-nsINode*
-nsXMLBindingValues::GetNodeAssignmentFor(nsXULTemplateResultXML* aResult,
-                                         nsXMLBinding* aBinding,
-                                         int32_t aIndex)
-{
-  XPathResult* result = GetAssignmentFor(aResult, aBinding, aIndex,
-                                         XPathResult::FIRST_ORDERED_NODE_TYPE);
-
-  ErrorResult rv;
-  return result ? result->GetSingleNodeValue(rv) : nullptr;
-}
-
-void
-nsXMLBindingValues::GetStringAssignmentFor(nsXULTemplateResultXML* aResult,
-                                           nsXMLBinding* aBinding,
-                                           int32_t aIndex,
-                                           nsAString& aValue)
-{
-  XPathResult* result = GetAssignmentFor(aResult, aBinding, aIndex,
-                                         XPathResult::STRING_TYPE);
-
-  if (result) {
-    ErrorResult rv;
-    result->GetStringValue(aValue, rv);
-  } else {
-    aValue.Truncate();
-  }
-}
deleted file mode 100644
--- a/dom/xul/templates/nsXMLBinding.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsXMLBinding_h__
-#define nsXMLBinding_h__
-
-#include "nsAutoPtr.h"
-#include "nsAtom.h"
-#include "mozilla/Attributes.h"
-#include "mozilla/dom/XPathExpression.h"
-
-class nsINode;
-class nsXULTemplateResultXML;
-class nsXMLBindingValues;
-namespace mozilla {
-namespace dom {
-class XPathResult;
-} // namespace dom
-} // namespace mozilla
-
-/**
- * Classes related to storing bindings for XML handling.
- */
-
-/**
- * a <binding> description
- */
-struct nsXMLBinding {
-  RefPtr<nsAtom> mVar;
-  nsAutoPtr<mozilla::dom::XPathExpression> mExpr;
-
-  nsAutoPtr<nsXMLBinding> mNext;
-
-  nsXMLBinding(nsAtom* aVar, nsAutoPtr<mozilla::dom::XPathExpression>&& aExpr)
-    : mVar(aVar), mExpr(aExpr), mNext(nullptr)
-  {
-    MOZ_COUNT_CTOR(nsXMLBinding);
-  }
-
-  ~nsXMLBinding()
-  {
-    MOZ_COUNT_DTOR(nsXMLBinding);
-  }
-};
-
-/**
- * a collection of <binding> descriptors. This object is refcounted by
- * nsXMLBindingValues objects and the query processor.
- */
-class nsXMLBindingSet final
-{
-  ~nsXMLBindingSet();
-
-public:
-  // pointer to the first binding in a linked list
-  nsAutoPtr<nsXMLBinding> mFirst;
-
-  NS_INLINE_DECL_REFCOUNTING(nsXMLBindingSet);
-
-  /**
-   * Add a binding to the set
-   */
-  void
-  AddBinding(nsAtom* aVar, nsAutoPtr<mozilla::dom::XPathExpression>&& aExpr);
-
-  /**
-   * The nsXMLBindingValues class stores an array of values, one for each
-   * target symbol that could be set by the bindings in the set.
-   * LookupTargetIndex determines the index into the array for a given
-   * target symbol.
-   */
-  int32_t
-  LookupTargetIndex(nsAtom* aTargetVariable, nsXMLBinding** aBinding);
-};
-
-/**
- * a set of values of bindings. This object is used once per result.
- */
-class nsXMLBindingValues
-{
-protected:
-
-  // the binding set
-  RefPtr<nsXMLBindingSet> mBindings;
-
-  /**
-   * A set of values for variable bindings. To look up a binding value,
-   * scan through the binding set in mBindings for the right target atom.
-   * Its index will correspond to the index in this array.
-   */
-  nsTArray<RefPtr<mozilla::dom::XPathResult> > mValues;
-
-public:
-
-  nsXMLBindingValues() { MOZ_COUNT_CTOR(nsXMLBindingValues); }
-  ~nsXMLBindingValues() { MOZ_COUNT_DTOR(nsXMLBindingValues); }
-
-  nsXMLBindingSet* GetBindingSet() { return mBindings; }
-
-  void SetBindingSet(nsXMLBindingSet* aBindings) { mBindings = aBindings; }
-
-  int32_t
-  LookupTargetIndex(nsAtom* aTargetVariable, nsXMLBinding** aBinding)
-  {
-    return mBindings ?
-           mBindings->LookupTargetIndex(aTargetVariable, aBinding) : -1;
-  }
-
-  /**
-   * Retrieve the assignment for a particular variable
-   *
-   * aResult the result generated from the template
-   * aBinding the binding looked up using LookupTargetIndex
-   * aIndex the index of the assignment to retrieve
-   * aType the type of result expected
-   */
-  mozilla::dom::XPathResult*
-  GetAssignmentFor(nsXULTemplateResultXML* aResult,
-                   nsXMLBinding* aBinding,
-                   int32_t idx,
-                   uint16_t type);
-
-  nsINode*
-  GetNodeAssignmentFor(nsXULTemplateResultXML* aResult,
-                       nsXMLBinding* aBinding,
-                       int32_t idx);
-
-  void
-  GetStringAssignmentFor(nsXULTemplateResultXML* aResult,
-                         nsXMLBinding* aBinding,
-                         int32_t idx,
-                         nsAString& aValue);
-};
-
-#endif // nsXMLBinding_h__
deleted file mode 100644
--- a/dom/xul/templates/nsXULContentBuilder.cpp
+++ /dev/null
@@ -1,1964 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "mozilla/ArrayUtils.h"
-
-#include "nsContentCID.h"
-#include "nsIDocument.h"
-#include "nsIDOMNodeList.h"
-#include "nsIDOMXULDocument.h"
-#include "mozilla/dom/NodeInfo.h"
-#include "nsIServiceManager.h"
-#include "nsIXULDocument.h"
-
-#include "nsContentSupportMap.h"
-#include "nsRDFConMemberTestNode.h"
-#include "nsRDFPropertyTestNode.h"
-#include "nsXULSortService.h"
-#include "nsTemplateRule.h"
-#include "nsTemplateMap.h"
-#include "nsTArray.h"
-#include "nsString.h"
-#include "nsGkAtoms.h"
-#include "nsXULContentUtils.h"
-#include "nsXULElement.h"
-#include "nsXULTemplateBuilder.h"
-#include "nsNodeInfoManager.h"
-#include "nsContentCreatorFunctions.h"
-#include "nsContentUtils.h"
-#include "nsAttrName.h"
-#include "nsNodeUtils.h"
-#include "mozAutoDocUpdate.h"
-#include "nsTextNode.h"
-#include "mozilla/dom/Element.h"
-
-#include "PLDHashTable.h"
-#include "rdf.h"
-
-using namespace mozilla;
-using namespace mozilla::dom;
-
-//----------------------------------------------------------------------
-//
-// Return values for EnsureElementHasGenericChild()
-//
-#define NS_ELEMENT_GOT_CREATED NS_RDF_NO_VALUE
-#define NS_ELEMENT_WAS_THERE   NS_OK
-
-//----------------------------------------------------------------------
-//
-// nsXULContentBuilder
-//
-
-/**
- * The content builder generates DOM nodes from a template. The actual content
- * generation is done entirely inside BuildContentFromTemplate.
- *
- * Content generation is centered around the generation node (the node with
- * uri="?member" on it). Nodes above the generation node are unique and
- * generated only once. BuildContentFromTemplate will be passed the unique
- * flag as an argument for content at this point and will recurse until it
- * finds the generation node.
- *
- * Once the generation node has been found, the results for that content node
- * are added to the content map, stored in mContentSupportMap.
- *
- * If recursion is allowed, generation continues, where the generation node
- * becomes the container to insert into.
- */
-class nsXULContentBuilder : public nsXULTemplateBuilder
-{
-public:
-    // nsIXULTemplateBuilder interface
-    NS_IMETHOD CreateContents(Element* aElement, bool aForceCreation) override;
-
-    using nsIXULTemplateBuilder::HasGeneratedContent;
-    bool HasGeneratedContent(nsIRDFResource* aResource,
-                             const nsAString& aTag,
-                             ErrorResult& aError) override;
-
-    using nsIXULTemplateBuilder::GetResultForContent;
-    nsIXULTemplateResult* GetResultForContent(Element& aElement) override;
-
-    // nsIMutationObserver interface
-    NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED
-    NS_DECL_NSIMUTATIONOBSERVER_NODEWILLBEDESTROYED
-
-protected:
-    friend nsresult
-    NS_NewXULContentBuilder(Element* aElement, nsIXULTemplateBuilder** aBuilder);
-
-    explicit nsXULContentBuilder(Element* aElement);
-
-    void Traverse(nsCycleCollectionTraversalCallback& aCb) const override
-    {
-        mSortState.Traverse(aCb);
-    }
-
-    virtual void Uninit(bool aIsFinal) override;
-
-    // Implementation methods
-    nsresult
-    OpenContainer(Element* aElement);
-
-    nsresult
-    CloseContainer(Element* aElement);
-
-    /**
-     * Build content from a template for a given result. This will be called
-     * recursively or on demand and will be called for every node in the
-     * generated content tree.
-     */
-    nsresult
-    BuildContentFromTemplate(nsIContent *aTemplateNode,
-                             nsIContent *aResourceNode,
-                             Element* aRealElement,
-                             bool aIsUnique,
-                             bool aIsSelfReference,
-                             nsIXULTemplateResult* aChild,
-                             bool aNotify,
-                             nsTemplateMatch* aMatch,
-                             Element** aContainer,
-                             int32_t* aNewIndexInContainer);
-
-    /**
-     * Copy the attributes from the template node to the node generated
-     * from it, performing any substitutions.
-     *
-     * @param aTemplateElement element within template
-     * @param aRealElement generated element to set attibutes upon
-     * @param aResult result to look up variable->value bindings in
-     * @param aNotify true to notify of DOM changes
-     */
-    nsresult
-    CopyAttributesToElement(Element* aTemplateElement,
-                            Element* aRealElement,
-                            nsIXULTemplateResult* aResult,
-                            bool aNotify);
-
-    /**
-     * Add any necessary persistent attributes (persist="...") from the
-     * local store to a generated node.
-     *
-     * @param aTemplateNode node within template
-     * @param aRealNode generated node to set persisted attibutes upon
-     * @param aResult result to look up variable->value bindings in
-     */
-    nsresult
-    AddPersistentAttributes(Element* aTemplateElement,
-                            nsIXULTemplateResult* aResult,
-                            Element* aRealElement);
-
-    /**
-     * Recalculate any attributes that have variable references. This will
-     * be called when a binding has been changed to update the attributes.
-     * The attributes are copied from the node aTemplateNode in the template
-     * to the generated node aRealNode, using the values from the result
-     * aResult. This method will operate recursively.
-     *
-     * @param aTemplateNode node within template
-     * @param aRealNode generated node to set attibutes upon
-     * @param aResult result to look up variable->value bindings in
-     */
-    nsresult
-    SynchronizeUsingTemplate(nsIContent *aTemplateNode,
-                             nsIContent* aRealNode,
-                             nsIXULTemplateResult* aResult);
-
-    /**
-     * Remove the generated node aContent from the DOM and the hashtables
-     * used by the content builder.
-     */
-    nsresult
-    RemoveMember(nsIContent* aContent);
-
-    /**
-     * Create the appropriate generated content for aElement, by calling
-     * CreateContainerContents.
-     *
-     * @param aElement element to generate content inside
-     * @param aForceCreation true to force creation for closed items such as menus
-     */
-    nsresult
-    CreateTemplateAndContainerContents(Element* aElement,
-                                       bool aForceCreation);
-
-    /**
-     * Generate the results for a template, by calling
-     * CreateContainerContentsForQuerySet for each queryset.
-     *
-     * @param aElement element to generate content inside
-     * @param aResult reference point for query
-     * @param aForceCreation true to force creation for closed items such as menus
-     * @param aNotify true to notify of DOM changes as each element is inserted
-     * @param aNotifyAtEnd notify at the end of all DOM changes
-     */
-    nsresult
-    CreateContainerContents(Element* aElement,
-                            nsIXULTemplateResult* aResult,
-                            bool aForceCreation,
-                            bool aNotify,
-                            bool aNotifyAtEnd);
-
-    /**
-     * Generate the results for a query.
-     *
-     * @param aElement element to generate content inside
-     * @param aResult reference point for query
-     * @param aNotify true to notify of DOM changes
-     * @param aContainer container content was added inside
-     * @param aNewIndexInContainer index with container in which content was added
-     */
-    nsresult
-    CreateContainerContentsForQuerySet(Element* aElement,
-                                       nsIXULTemplateResult* aResult,
-                                       bool aNotify,
-                                       nsTemplateQuerySet* aQuerySet,
-                                       Element** aContainer,
-                                       int32_t* aNewIndexInContainer);
-
-    /**
-     * Check if an element with a particular tag exists with a container.
-     * If it is not present, append a new element with that tag into the
-     * container.
-     *
-     * @param aParent parent container
-     * @param aNameSpaceID namespace of tag to locate or create
-     * @param aTag tag to locate or create
-     * @param aNotify true to notify of DOM changes
-     * @param aResult set to the found or created node.
-     */
-    nsresult
-    EnsureElementHasGenericChild(Element* aParent,
-                                 int32_t aNameSpaceID,
-                                 nsAtom* aTag,
-                                 bool aNotify,
-                                 Element** aResult);
-
-    bool
-    IsOpen(nsIContent* aElement);
-
-    nsresult
-    RemoveGeneratedContent(nsIContent* aElement);
-
-    nsresult
-    GetElementsForResult(nsIXULTemplateResult* aResult,
-                         nsCOMArray<Element>& aElements);
-
-    nsresult
-    CreateElement(int32_t aNameSpaceID,
-                  nsAtom* aTag,
-                  Element** aResult);
-
-    /**
-     * Set the container and empty attributes on a node. If
-     * aIgnoreNonContainers is true, then the element is not changed
-     * for non-containers. Otherwise, the container attribute will be set to
-     * false.
-     *
-     * @param aElement element to set attributes on
-     * @param aResult result to use to determine state of attributes
-     * @param aIgnoreNonContainers true to not change for non-containers
-     * @param aNotify true to notify of DOM changes
-     */
-    nsresult
-    SetContainerAttrs(Element* aElement,
-                      nsIXULTemplateResult* aResult,
-                      bool aIgnoreNonContainers,
-                      bool aNotify);
-
-    virtual nsresult
-    RebuildAll() override;
-
-    // GetInsertionLocations, ReplaceMatch and SynchronizeResult are inherited
-    // from nsXULTemplateBuilder
-
-    /**
-     * Return true if the result can be inserted into the template as
-     * generated content. For the content builder, aLocations will be set
-     * to the list of containers where the content should be inserted.
-     */
-    virtual bool
-    GetInsertionLocations(nsIXULTemplateResult* aOldResult,
-                          nsCOMArray<Element>** aLocations) override;
-
-    /**
-     * Remove the content associated with aOldResult which no longer matches,
-     * and/or generate content for a new match.
-     */
-    virtual nsresult
-    ReplaceMatch(nsIXULTemplateResult* aOldResult,
-                 nsTemplateMatch* aNewMatch,
-                 nsTemplateRule* aNewMatchRule,
-                 Element* aContext) override;
-
-    /**
-     * Synchronize a result bindings with the generated content for that
-     * result. This will be called as a result of the template builder's
-     * ResultBindingChanged method.
-     */
-    virtual nsresult
-    SynchronizeResult(nsIXULTemplateResult* aResult) override;
-
-    /**
-     * Compare a result to a content node. If the generated content for the
-     * result should come before aContent, set aSortOrder to -1. If it should
-     * come after, set sortOrder to 1. If both are equal, set to 0.
-     */
-    nsresult
-    CompareResultToNode(nsIXULTemplateResult* aResult, nsIContent* aContent,
-                        int32_t* aSortOrder);
-
-    /**
-     * Insert a generated node into the container where it should go according
-     * to the current sort. aNode is the generated content node and aResult is
-     * the result for the generated node.
-     */
-    nsresult
-    InsertSortedNode(Element* aContainer,
-                     nsIContent* aNode,
-                     nsIXULTemplateResult* aResult,
-                     bool aNotify);
-
-    /**
-     * Maintains a mapping between elements in the DOM and the matches
-     * that they support.
-     */
-    nsContentSupportMap mContentSupportMap;
-
-    /**
-     * Maintains a mapping from an element in the DOM to the template
-     * element that it was created from.
-     */
-    nsTemplateMap mTemplateMap;
-
-    /**
-     * Information about the currently active sort
-     */
-    nsSortState mSortState;
-};
-
-nsresult
-NS_NewXULContentBuilder(Element* aElement, nsIXULTemplateBuilder** aBuilder)
-{
-    RefPtr<nsXULContentBuilder> builder = new nsXULContentBuilder(aElement);
-    nsresult rv = builder->Init();
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    builder.forget(aBuilder);
-    return NS_OK;
-}
-
-nsXULContentBuilder::nsXULContentBuilder(Element* aElement)
-  : nsXULTemplateBuilder(aElement)
-{
-  mSortState.initialized = false;
-}
-
-void
-nsXULContentBuilder::Uninit(bool aIsFinal)
-{
-    if (! aIsFinal && mRoot) {
-        nsresult rv = RemoveGeneratedContent(mRoot);
-        if (NS_FAILED(rv))
-            return;
-    }
-
-    // Nuke the content support map completely.
-    mContentSupportMap.Clear();
-    mTemplateMap.Clear();
-
-    mSortState.initialized = false;
-
-    nsXULTemplateBuilder::Uninit(aIsFinal);
-}
-
-nsresult
-nsXULContentBuilder::BuildContentFromTemplate(nsIContent *aTemplateNode,
-                                              nsIContent *aResourceNode,
-                                              Element* aRealElement,
-                                              bool aIsUnique,
-                                              bool aIsSelfReference,
-                                              nsIXULTemplateResult* aChild,
-                                              bool aNotify,
-                                              nsTemplateMatch* aMatch,
-                                              Element** aContainer,
-                                              int32_t* aNewIndexInContainer)
-{
-    // This is the mother lode. Here is where we grovel through an
-    // element in the template, copying children from the template
-    // into the "real" content tree, performing substitution as we go
-    // by looking stuff up using the results.
-    //
-    //   |aTemplateNode| is the element in the "template tree", whose
-    //   children we will duplicate and move into the "real" content
-    //   tree.
-    //
-    //   |aResourceNode| is the element in the "real" content tree that
-    //   has the "id" attribute set to an result's id. This is
-    //   not directly used here, but rather passed down to the XUL
-    //   sort service to perform container-level sort.
-    //
-    //   |aRealElement| is the element in the "real" content tree to which
-    //   the new elements will be copied.
-    //
-    //   |aIsUnique| is set to "true" so long as content has been
-    //   "unique" (or "above" the resource element) so far in the
-    //   template.
-    //
-    //   |aIsSelfReference| should be set to "true" for cases where
-    //   the reference and member variables are the same, indicating
-    //   that the generated node is the same as the reference point,
-    //   so generation should not recurse, or else an infinite loop
-    //   would occur.
-    //
-    //   |aChild| is the result for which we are building content.
-    //
-    //   |aNotify| is set to "true" if content should be constructed
-    //   "noisily"; that is, whether the document observers should be
-    //   notified when new content is added to the content model.
-    //
-    //   |aContainer| is an out parameter that will be set to the first
-    //   container element in the "real" content tree to which content
-    //   was appended.
-    //
-    //   |aNewIndexInContainer| is an out parameter that will be set to
-    //   the index in aContainer at which new content is first
-    //   constructed.
-    //
-    // If |aNotify| is "false", then |aContainer| and
-    // |aNewIndexInContainer| are used to determine where in the
-    // content model new content is constructed. This allows a single
-    // notification to be propagated to document observers.
-    //
-
-    nsresult rv;
-
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsXULContentBuilder::BuildContentFromTemplate (is unique: %d)",
-               aIsUnique));
-
-        nsAutoString id;
-        aChild->GetId(id);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("Tags: [Template: %s  Resource: %s  Real: %s] for id %s",
-                nsAtomCString(aTemplateNode->NodeInfo()->NameAtom()).get(),
-                nsAtomCString(aResourceNode->NodeInfo()->NameAtom()).get(),
-                nsAtomCString(aRealElement->NodeInfo()->NameAtom()).get(), NS_ConvertUTF16toUTF8(id).get()));
-    }
-
-    // Iterate through all of the template children, constructing
-    // "real" content model nodes for each "template" child.
-    for (nsIContent* tmplKid = aTemplateNode->GetFirstChild();
-         tmplKid;
-         tmplKid = tmplKid->GetNextSibling()) {
-        int32_t nameSpaceID = tmplKid->GetNameSpaceID();
-
-        // Check whether this element is the generation element. The generation
-        // element is the element that is cookie-cutter copied once for each
-        // different result specified by |aChild|.
-        //
-        // Nodes that appear -above- the generation element
-        // (that is, are ancestors of the generation element in the
-        // content model) are unique across all values of |aChild|,
-        // and are created only once.
-        //
-        // Nodes that appear -below- the generation element (that is,
-        // are descendants of the generation element in the content
-        // model), are cookie-cutter copied for each distinct value of
-        // |aChild|.
-        //
-        // For example, in a <tree> template:
-        //
-        //   <tree>
-        //     <template>
-        //       <treechildren> [1]
-        //         <treeitem uri="rdf:*"> [2]
-        //           <treerow> [3]
-        //             <treecell value="rdf:urn:foo" /> [4]
-        //             <treecell value="rdf:urn:bar" /> [5]
-        //           </treerow>
-        //         </treeitem>
-        //       </treechildren>
-        //     </template>
-        //   </tree>
-        //
-        // The <treeitem> element [2] is the generation element. This
-        // element, and all of its descendants ([3], [4], and [5])
-        // will be duplicated for each different |aChild|.
-        // It's ancestor <treechildren> [1] is unique, and
-        // will only be created -once-, no matter how many <treeitem>s
-        // are created below it.
-        //
-        // isUnique will be true for nodes above the generation element,
-        // isGenerationElement will be true for the generation element,
-        // and both will be false for descendants
-        bool isGenerationElement = false;
-        bool isUnique = aIsUnique;
-
-        // We identify the resource element by presence of a
-        // "uri='rdf:*'" attribute. (We also support the older
-        // "uri='...'" syntax.)
-        if (tmplKid->IsElement() &&
-            tmplKid->AsElement()->HasAttr(kNameSpaceID_None, nsGkAtoms::uri) &&
-            aMatch->IsActive()) {
-            isGenerationElement = true;
-            isUnique = false;
-        }
-
-        MOZ_ASSERT_IF(isGenerationElement, tmplKid->IsElement());
-
-        nsAtom* tag = tmplKid->NodeInfo()->NameAtom();
-
-        if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-            MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                   ("xultemplate[%p]     building %s %s %s",
-                    this, nsAtomCString(tag).get(),
-                    (isGenerationElement ? "[resource]" : ""),
-                    (isUnique ? "[unique]" : "")));
-        }
-
-        // Set to true if the child we're trying to create now
-        // already existed in the content model.
-        bool realKidAlreadyExisted = false;
-
-        RefPtr<Element> realKid;
-        if (isUnique) {
-            // The content is "unique"; that is, we haven't descended
-            // far enough into the template to hit the generation
-            // element yet. |EnsureElementHasGenericChild()| will
-            // conditionally create the element iff it isn't there
-            // already.
-            //
-            // FIXME(emilio): The code below doesn't really make much sense if
-            // tmplKid is not an element. If it ever wasn't, we'd either find a
-            // child by tag, which doesn't really make sense, and event worse...
-            // If we didn't find it, we'd create an actual element with a text
-            // node tag for it.
-            //
-            // Both are completely bogus in tons of ways, so just avoid calling
-            // into EnsureElementHasGenericChild for non-elements, assuming the
-            // node is already there.
-            rv = NS_ELEMENT_WAS_THERE;
-            if (tmplKid->IsElement()) {
-              rv = EnsureElementHasGenericChild(aRealElement, nameSpaceID, tag, aNotify, getter_AddRefs(realKid));
-              if (NS_FAILED(rv))
-                  return rv;
-            }
-
-            if (rv == NS_ELEMENT_WAS_THERE) {
-                realKidAlreadyExisted = true;
-            } else {
-                // Potentially remember the index of this element as the first
-                // element that we've generated. Note that we remember
-                // this -before- we recurse!
-                if (aContainer && !*aContainer) {
-                    *aContainer = aRealElement;
-                    NS_ADDREF(*aContainer);
-
-                    uint32_t indx = aRealElement->GetChildCount();
-
-                    // Since EnsureElementHasGenericChild() added us, make
-                    // sure to subtract one for our real index.
-                    *aNewIndexInContainer = indx - 1;
-                }
-            }
-
-            // Recurse until we get to the resource element. Since
-            // -we're- unique, assume that our child will be
-            // unique. The check for the "resource" element at the top
-            // of the function will trip this to |false| as soon as we
-            // encounter it.
-            rv = BuildContentFromTemplate(tmplKid, aResourceNode, realKid, true,
-                                          aIsSelfReference, aChild, aNotify, aMatch,
-                                          aContainer, aNewIndexInContainer);
-
-            if (NS_FAILED(rv))
-                return rv;
-        } else if (isGenerationElement) {
-            // It's the "resource" element. Create a new element using
-            // the namespace ID and tag from the template element.
-            nsCOMPtr<Element> element;
-            rv = CreateElement(nameSpaceID, tag, getter_AddRefs(element));
-            if (NS_FAILED(rv))
-                return rv;
-            realKid = element.forget();
-
-            // Add the resource element to the content support map so
-            // we can remove the match based on the content node later.
-            mContentSupportMap.Put(realKid, aMatch);
-
-            // Assign the element an 'id' attribute using result's id
-            nsAutoString id;
-            rv = aChild->GetId(id);
-            if (NS_FAILED(rv))
-                return rv;
-
-            rv = realKid->SetAttr(kNameSpaceID_None, nsGkAtoms::id, id, false);
-            if (NS_FAILED(rv))
-                return rv;
-
-            // Set up the element's 'container' and 'empty' attributes.
-            SetContainerAttrs(realKid, aChild, true, false);
-        } else if (tag == nsGkAtoms::textnode &&
-                   nameSpaceID == kNameSpaceID_XUL) {
-            // <xul:text value="..."> is replaced by text of the
-            // actual value of the 'rdf:resource' attribute for the
-            // given node.
-            // SynchronizeUsingTemplate contains code used to update textnodes,
-            // so make sure to modify both when changing this
-            nsAutoString attrValue;
-            tmplKid->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::value,
-                                          attrValue);
-            if (!attrValue.IsEmpty()) {
-                nsAutoString value;
-                rv = SubstituteText(aChild, attrValue, value);
-                if (NS_FAILED(rv)) return rv;
-
-                RefPtr<nsTextNode> content =
-                  new nsTextNode(mRoot->NodeInfo()->NodeInfoManager());
-
-                content->SetText(value, false);
-
-                rv = aRealElement->AppendChildTo(content, aNotify);
-                if (NS_FAILED(rv)) return rv;
-
-                // XXX Don't bother remembering text nodes as the
-                // first element we've generated?
-            }
-        } else if (tmplKid->IsNodeOfType(nsINode::eTEXT)) {
-            nsCOMPtr<nsIDOMNode> tmplTextNode = do_QueryInterface(tmplKid);
-            if (!tmplTextNode) {
-                NS_ERROR("textnode not implementing nsIDOMNode??");
-                return NS_ERROR_FAILURE;
-            }
-            nsCOMPtr<nsIDOMNode> clonedNode;
-            tmplTextNode->CloneNode(false, 1, getter_AddRefs(clonedNode));
-            nsCOMPtr<nsIContent> clonedContent = do_QueryInterface(clonedNode);
-            if (!clonedContent) {
-                NS_ERROR("failed to clone textnode");
-                return NS_ERROR_FAILURE;
-            }
-            rv = aRealElement->AppendChildTo(clonedContent, aNotify);
-            if (NS_FAILED(rv)) return rv;
-        } else {
-            // It's just a generic element. Create it!
-            nsCOMPtr<Element> element;
-            rv = CreateElement(nameSpaceID, tag, getter_AddRefs(element));
-            if (NS_FAILED(rv)) return rv;
-            realKid = element.forget();
-        }
-
-        if (realKid && !realKidAlreadyExisted) {
-            // Potentially remember the index of this element as the
-            // first element that we've generated.
-            if (aContainer && !*aContainer) {
-                *aContainer = aRealElement;
-                NS_ADDREF(*aContainer);
-
-                uint32_t indx = aRealElement->GetChildCount();
-
-                // Since we haven't inserted any content yet, our new
-                // index in the container will be the current count of
-                // elements in the container.
-                *aNewIndexInContainer = indx;
-            }
-
-            // Remember the template kid from which we created the
-            // real kid. This allows us to sync back up with the
-            // template to incrementally build content.
-            mTemplateMap.Put(realKid, tmplKid);
-
-            rv = CopyAttributesToElement(tmplKid->AsElement(),
-                                         realKid, aChild,
-                                         false);
-            if (NS_FAILED(rv)) return rv;
-
-            // Add any persistent attributes
-            if (isGenerationElement) {
-                rv = AddPersistentAttributes(tmplKid->AsElement(), aChild,
-                                             realKid);
-                if (NS_FAILED(rv)) return rv;
-            }
-
-            // the unique content recurses up above. Also, don't recurse if
-            // this is a self reference (a reference to the same resource)
-            // or we'll end up regenerating the same content.
-            if (!aIsSelfReference && !isUnique) {
-                // this call creates the content inside the generation node,
-                // for example the label below:
-                //  <vbox uri="?">
-                //    <label value="?title"/>
-                //  </vbox>
-                rv = BuildContentFromTemplate(tmplKid, aResourceNode, realKid, false,
-                                              false, aChild, false, aMatch,
-                                              nullptr /* don't care */,
-                                              nullptr /* don't care */);
-                if (NS_FAILED(rv)) return rv;
-
-                if (isGenerationElement) {
-                    // build the next level of children
-                    rv = CreateContainerContents(realKid, aChild, false,
-                                                 false, false);
-                    if (NS_FAILED(rv)) return rv;
-                }
-            }
-
-            // We'll _already_ have added the unique elements; but if
-            // it's -not- unique, then use the XUL sort service now to
-            // append the element to the content model.
-            if (! isUnique) {
-                rv = NS_ERROR_UNEXPECTED;
-
-                if (isGenerationElement)
-                    rv = InsertSortedNode(aRealElement, realKid, aChild, aNotify);
-
-                if (NS_FAILED(rv)) {
-                    rv = aRealElement->AppendChildTo(realKid, aNotify);
-                    NS_ASSERTION(NS_SUCCEEDED(rv), "unable to insert element");
-                }
-            }
-        }
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::CopyAttributesToElement(Element* aTemplateElement,
-                                             Element* aRealElement,
-                                             nsIXULTemplateResult* aResult,
-                                             bool aNotify)
-{
-    nsresult rv;
-
-    // Copy all attributes from the template to the new element
-    uint32_t numAttribs = aTemplateElement->GetAttrCount();
-
-    for (uint32_t attr = 0; attr < numAttribs; attr++) {
-        const nsAttrName* name = aTemplateElement->GetAttrNameAt(attr);
-        int32_t attribNameSpaceID = name->NamespaceID();
-        // Hold a strong reference here so that the atom doesn't go away
-        // during UnsetAttr.
-        RefPtr<nsAtom> attribName = name->LocalName();
-
-        // XXXndeakin ignore namespaces until bug 321182 is fixed
-        if (attribName != nsGkAtoms::id && attribName != nsGkAtoms::uri) {
-            nsAutoString attribValue;
-            aTemplateElement->GetAttr(attribNameSpaceID, attribName, attribValue);
-            if (!attribValue.IsEmpty()) {
-                nsAutoString value;
-                rv = SubstituteText(aResult, attribValue, value);
-                if (NS_FAILED(rv))
-                    return rv;
-
-                // if the string is empty after substitutions, remove the
-                // attribute
-                if (!value.IsEmpty()) {
-                    rv = aRealElement->SetAttr(attribNameSpaceID,
-                                            attribName,
-                                            name->GetPrefix(),
-                                            value,
-                                            aNotify);
-                }
-                else {
-                    rv = aRealElement->UnsetAttr(attribNameSpaceID,
-                                              attribName,
-                                              aNotify);
-                }
-
-                if (NS_FAILED(rv))
-                    return rv;
-            }
-        }
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::AddPersistentAttributes(Element* aTemplateNode,
-                                             nsIXULTemplateResult* aResult,
-                                             Element* aRealElement)
-{
-    if (!mRoot)
-        return NS_OK;
-
-    nsCOMPtr<nsIRDFResource> resource;
-    nsresult rv = GetResultResource(aResult, getter_AddRefs(resource));
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    nsAutoString attribute, persist;
-    aTemplateNode->GetAttr(kNameSpaceID_None, nsGkAtoms::persist, persist);
-
-    while (!persist.IsEmpty()) {
-        attribute.Truncate();
-
-        int32_t offset = persist.FindCharInSet(" ,");
-        if (offset > 0) {
-            persist.Left(attribute, offset);
-            persist.Cut(0, offset + 1);
-        }
-        else {
-            attribute = persist;
-            persist.Truncate();
-        }
-
-        attribute.Trim(" ");
-
-        if (attribute.IsEmpty())
-            break;
-
-        RefPtr<nsAtom> tag;
-        int32_t nameSpaceID;
-
-        RefPtr<mozilla::dom::NodeInfo> ni =
-            aTemplateNode->GetExistingAttrNameFromQName(attribute);
-        if (ni) {
-            tag = ni->NameAtom();
-            nameSpaceID = ni->NamespaceID();
-        }
-        else {
-            tag = NS_Atomize(attribute);
-            NS_ENSURE_TRUE(tag, NS_ERROR_OUT_OF_MEMORY);
-
-            nameSpaceID = kNameSpaceID_None;
-        }
-
-        nsCOMPtr<nsIRDFResource> property;
-        rv = nsXULContentUtils::GetResource(nameSpaceID, tag, getter_AddRefs(property));
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        nsCOMPtr<nsIRDFNode> target;
-        rv = mDB->GetTarget(resource, property, true, getter_AddRefs(target));
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        if (! target)
-            continue;
-
-        nsCOMPtr<nsIRDFLiteral> value = do_QueryInterface(target);
-        NS_ASSERTION(value != nullptr, "unable to stomach that sort of node");
-        if (! value)
-            continue;
-
-        const char16_t* valueStr;
-        rv = value->GetValueConst(&valueStr);
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        rv = aRealElement->SetAttr(nameSpaceID, tag, nsDependentString(valueStr),
-                                   false);
-        NS_ENSURE_SUCCESS(rv, rv);
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::SynchronizeUsingTemplate(nsIContent* aTemplateNode,
-                                              nsIContent* aRealNode,
-                                              nsIXULTemplateResult* aResult)
-{
-    // check all attributes on the template node; if they reference a resource,
-    // update the equivalent attribute on the content node
-    nsresult rv;
-    if (aTemplateNode->IsElement() && aRealNode->IsElement()) {
-        rv = CopyAttributesToElement(aTemplateNode->AsElement(), aRealNode->AsElement(), aResult, true);
-        if (NS_FAILED(rv))
-            return rv;
-    }
-
-    uint32_t count = aTemplateNode->GetChildCount();
-
-    for (uint32_t loop = 0; loop < count; ++loop) {
-        nsIContent *tmplKid = aTemplateNode->GetChildAt(loop);
-
-        if (! tmplKid)
-            break;
-
-        nsIContent *realKid = aRealNode->GetChildAt(loop);
-        if (! realKid)
-            break;
-
-        // check for text nodes and update them accordingly.
-        // This code is similar to that in BuildContentFromTemplate
-        if (tmplKid->NodeInfo()->Equals(nsGkAtoms::textnode,
-                                        kNameSpaceID_XUL)) {
-            nsAutoString attrValue;
-            tmplKid->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::value,
-                                          attrValue);
-            if (!attrValue.IsEmpty()) {
-                nsAutoString value;
-                rv = SubstituteText(aResult, attrValue, value);
-                if (NS_FAILED(rv)) return rv;
-                realKid->SetText(value, true);
-            }
-        }
-
-        rv = SynchronizeUsingTemplate(tmplKid, realKid, aResult);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::RemoveMember(nsIContent* aContent)
-{
-    nsCOMPtr<nsIContent> parent = aContent->GetParent();
-    if (parent) {
-        int32_t pos = parent->IndexOf(aContent);
-
-        NS_ASSERTION(pos >= 0, "parent doesn't think this child has an index");
-        if (pos < 0) return NS_OK;
-
-        // Note: RemoveChildAt sets |child|'s document to null so that
-        // it'll get knocked out of the XUL doc's resource-to-element
-        // map.
-        parent->RemoveChildAt(pos, true);
-    }
-
-    // Remove from the content support map.
-    mContentSupportMap.Remove(aContent);
-
-    // Remove from the template map
-    mTemplateMap.Remove(aContent);
-
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::CreateTemplateAndContainerContents(Element* aElement,
-                                                        bool aForceCreation)
-{
-    // Generate both 1) the template content for the current element,
-    // and 2) recursive subcontent (if the current element refers to a
-    // container result).
-
-    MOZ_LOG(gXULTemplateLog, LogLevel::Info,
-           ("nsXULContentBuilder::CreateTemplateAndContainerContents start - flags: %d",
-            mFlags));
-
-    if (! mQueryProcessor)
-        return NS_OK;
-
-    // for the root element, get the ref attribute and generate content
-    if (aElement == mRoot) {
-        if (! mRootResult) {
-            nsAutoString ref;
-            mRoot->GetAttr(kNameSpaceID_None, nsGkAtoms::ref, ref);
-
-            if (! ref.IsEmpty()) {
-                nsresult rv = mQueryProcessor->TranslateRef(mDataSource, ref,
-                                                            getter_AddRefs(mRootResult));
-                if (NS_FAILED(rv))
-                    return rv;
-            }
-        }
-
-        if (mRootResult) {
-            CreateContainerContents(aElement, mRootResult, aForceCreation,
-                                    false, true);
-        }
-    }
-    else if (!(mFlags & eDontRecurse)) {
-        // The content map will contain the generation elements (the ones that
-        // are given ids) and only those elements, so get the reference point
-        // from the corresponding match.
-        nsTemplateMatch *match = nullptr;
-        if (mContentSupportMap.Get(aElement, &match))
-            CreateContainerContents(aElement, match->mResult, aForceCreation,
-                                    false, true);
-    }
-
-    MOZ_LOG(gXULTemplateLog, LogLevel::Info,
-           ("nsXULContentBuilder::CreateTemplateAndContainerContents end"));
-
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::CreateContainerContents(Element* aElement,
-                                             nsIXULTemplateResult* aResult,
-                                             bool aForceCreation,
-                                             bool aNotify,
-                                             bool aNotifyAtEnd)
-{
-    if (!aForceCreation && !IsOpen(aElement))
-        return NS_OK;
-
-    // don't generate children if recursion or child processing isn't allowed
-    if (aResult != mRootResult) {
-        if (mFlags & eDontRecurse)
-            return NS_OK;
-
-        bool mayProcessChildren;
-        nsresult rv = aResult->GetMayProcessChildren(&mayProcessChildren);
-        if (NS_FAILED(rv) || !mayProcessChildren)
-            return rv;
-    }
-
-    nsCOMPtr<nsIRDFResource> refResource;
-    GetResultResource(aResult, getter_AddRefs(refResource));
-    if (! refResource)
-        return NS_ERROR_FAILURE;
-
-    // Avoid re-entrant builds for the same resource.
-    if (IsActivated(refResource))
-        return NS_OK;
-
-    ActivationEntry entry(refResource, &mTop);
-
-    // Compile the rules now, if they haven't been already.
-    if (! mQueriesCompiled) {
-        nsresult rv = CompileQueries();
-        if (NS_FAILED(rv))
-            return rv;
-    }
-
-    if (mQuerySets.Length() == 0)
-        return NS_OK;
-
-    // See if the element's templates contents have been generated:
-    // this prevents a re-entrant call from triggering another
-    // generation.
-    nsXULElement *xulcontent = nsXULElement::FromContent(aElement);
-    if (xulcontent) {
-        if (xulcontent->GetTemplateGenerated())
-            return NS_OK;
-
-        // Now mark the element's contents as being generated so that
-        // any re-entrant calls don't trigger an infinite recursion.
-        xulcontent->SetTemplateGenerated();
-    }
-
-    int32_t newIndexInContainer = -1;
-    Element* container = nullptr;
-
-    int32_t querySetCount = mQuerySets.Length();
-
-    for (int32_t r = 0; r < querySetCount; r++) {
-        nsTemplateQuerySet* queryset = mQuerySets[r];
-
-        nsAtom* tag = queryset->GetTag();
-        if (tag && tag != aElement->NodeInfo()->NameAtom())
-            continue;
-
-        CreateContainerContentsForQuerySet(aElement, aResult, aNotify, queryset,
-                                           &container, &newIndexInContainer);
-    }
-
-    if (aNotifyAtEnd && container) {
-        MOZ_AUTO_DOC_UPDATE(container->GetUncomposedDoc(), UPDATE_CONTENT_MODEL,
-                            true);
-        nsNodeUtils::ContentAppended(container,
-                                     container->GetChildAt(newIndexInContainer));
-    }
-
-    NS_IF_RELEASE(container);
-
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::CreateContainerContentsForQuerySet(Element* aElement,
-                                                        nsIXULTemplateResult* aResult,
-                                                        bool aNotify,
-                                                        nsTemplateQuerySet* aQuerySet,
-                                                        Element** aContainer,
-                                                        int32_t* aNewIndexInContainer)
-{
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        nsAutoString id;
-        aResult->GetId(id);
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsXULContentBuilder::CreateContainerContentsForQuerySet start for ref %s\n",
-               NS_ConvertUTF16toUTF8(id).get()));
-    }
-
-    if (! mQueryProcessor)
-        return NS_OK;
-
-    nsCOMPtr<nsISimpleEnumerator> results;
-    nsresult rv = mQueryProcessor->GenerateResults(mDataSource, aResult,
-                                                   aQuerySet->mCompiledQuery,
-                                                   getter_AddRefs(results));
-    if (NS_FAILED(rv) || !results)
-        return rv;
-
-    bool hasMoreResults;
-    rv = results->HasMoreElements(&hasMoreResults);
-
-    for (; NS_SUCCEEDED(rv) && hasMoreResults;
-           rv = results->HasMoreElements(&hasMoreResults)) {
-        nsCOMPtr<nsISupports> nr;
-        rv = results->GetNext(getter_AddRefs(nr));
-        if (NS_FAILED(rv))
-            return rv;
-
-        nsCOMPtr<nsIXULTemplateResult> nextresult = do_QueryInterface(nr);
-        if (!nextresult)
-            return NS_ERROR_UNEXPECTED;
-
-        nsCOMPtr<nsIRDFResource> resultid;
-        rv = GetResultResource(nextresult, getter_AddRefs(resultid));
-        if (NS_FAILED(rv))
-            return rv;
-
-        if (!resultid)
-            continue;
-
-        nsTemplateMatch *newmatch =
-            nsTemplateMatch::Create(aQuerySet->Priority(),
-                                    nextresult, aElement);
-        if (!newmatch)
-            return NS_ERROR_OUT_OF_MEMORY;
-
-        // check if there is already an existing match. If so, a previous
-        // query already generated content so the match is just added to the
-        // end of the set of matches.
-
-        bool generateContent = true;
-
-        nsTemplateMatch* prevmatch = nullptr;
-        nsTemplateMatch* existingmatch = nullptr;
-        nsTemplateMatch* removematch = nullptr;
-        if (mMatchMap.Get(resultid, &existingmatch)){
-            // check if there is an existing match that matched a rule
-            while (existingmatch) {
-                // break out once we've reached a query in the list with a
-                // higher priority, as the new match list is sorted by
-                // priority, and the new match should be inserted here
-                int32_t priority = existingmatch->QuerySetPriority();
-                if (priority > aQuerySet->Priority())
-                    break;
-
-                // skip over non-matching containers
-                if (existingmatch->GetContainer() == aElement) {
-                    // if the same priority is already found, replace it. This can happen
-                    // when a container is removed and readded
-                    if (priority == aQuerySet->Priority()) {
-                        removematch = existingmatch;
-                        break;
-                    }
-
-                    if (existingmatch->IsActive())
-                        generateContent = false;
-                }
-
-                prevmatch = existingmatch;
-                existingmatch = existingmatch->mNext;
-            }
-        }
-
-        if (removematch) {
-            // remove the generated content for the existing match
-            rv = ReplaceMatch(removematch->mResult, nullptr, nullptr, aElement);
-            if (NS_FAILED(rv))
-                return rv;
-
-            if (mFlags & eLoggingEnabled)
-                OutputMatchToLog(resultid, removematch, false);
-        }
-
-        if (generateContent) {
-            // find the rule that matches. If none match, the content does not
-            // need to be generated
-
-            int16_t ruleindex;
-            nsTemplateRule* matchedrule = nullptr;
-            rv = DetermineMatchedRule(aElement, nextresult, aQuerySet,
-                                      &matchedrule, &ruleindex);
-            if (NS_FAILED(rv)) {
-                nsTemplateMatch::Destroy(newmatch, false);
-                return rv;
-            }
-
-            if (matchedrule) {
-                rv = newmatch->RuleMatched(aQuerySet, matchedrule,
-                                           ruleindex, nextresult);
-                if (NS_FAILED(rv)) {
-                    nsTemplateMatch::Destroy(newmatch, false);
-                    return rv;
-                }
-
-                // Grab the template node
-                nsCOMPtr<nsIContent> action = matchedrule->GetAction();
-                BuildContentFromTemplate(action, aElement, aElement, true,
-                                         mRefVariable == matchedrule->GetMemberVariable(),
-                                         nextresult, aNotify, newmatch,
-                                         aContainer, aNewIndexInContainer);
-            }
-        }
-
-        if (mFlags & eLoggingEnabled)
-            OutputMatchToLog(resultid, newmatch, true);
-
-        if (prevmatch) {
-            prevmatch->mNext = newmatch;
-        }
-        else {
-            mMatchMap.Put(resultid, newmatch);
-        }
-
-        if (removematch) {
-            newmatch->mNext = removematch->mNext;
-            nsTemplateMatch::Destroy(removematch, true);
-        }
-        else {
-            newmatch->mNext = existingmatch;
-        }
-    }
-
-    return rv;
-}
-
-nsresult
-nsXULContentBuilder::EnsureElementHasGenericChild(Element* parent,
-                                                  int32_t nameSpaceID,
-                                                  nsAtom* tag,
-                                                  bool aNotify,
-                                                  Element** result)
-{
-    nsresult rv;
-
-    rv = nsXULContentUtils::FindChildByTag(parent, nameSpaceID, tag, result);
-    if (NS_FAILED(rv))
-        return rv;
-
-    if (rv == NS_RDF_NO_VALUE) {
-        // we need to construct a new child element.
-        nsCOMPtr<Element> element;
-
-        rv = CreateElement(nameSpaceID, tag, getter_AddRefs(element));
-        if (NS_FAILED(rv))
-            return rv;
-
-        // XXX Note that the notification ensures we won't batch insertions! This could be bad! - Dave
-        rv = parent->AppendChildTo(element, aNotify);
-        if (NS_FAILED(rv))
-            return rv;
-
-        element.forget(result);
-        return NS_ELEMENT_GOT_CREATED;
-    }
-    else {
-        return NS_ELEMENT_WAS_THERE;
-    }
-}
-
-bool
-nsXULContentBuilder::IsOpen(nsIContent* aElement)
-{
-    // Determine if this is a <treeitem> or <menu> element
-
-    // XXXhyatt Use the XBL service to obtain a base tag.
-    if (aElement->IsAnyOfXULElements(nsGkAtoms::menu,
-                                     nsGkAtoms::menubutton,
-                                     nsGkAtoms::toolbarbutton,
-                                     nsGkAtoms::button,
-                                     nsGkAtoms::treeitem))
-        return aElement->AsElement()->AttrValueIs(
-            kNameSpaceID_None, nsGkAtoms::open, nsGkAtoms::_true, eCaseMatters);
-    return true;
-}
-
-nsresult
-nsXULContentBuilder::RemoveGeneratedContent(nsIContent* aElement)
-{
-    // Keep a queue of "ungenerated" elements that we have to probe
-    // for generated content.
-    AutoTArray<nsIContent*, 8> ungenerated;
-    if (ungenerated.AppendElement(aElement) == nullptr)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    uint32_t count;
-    while (0 != (count = ungenerated.Length())) {
-        // Pull the next "ungenerated" element off the queue.
-        uint32_t last = count - 1;
-        nsCOMPtr<nsIContent> element = ungenerated[last];
-        ungenerated.RemoveElementAt(last);
-
-        uint32_t i = element->GetChildCount();
-
-        while (i-- > 0) {
-            nsCOMPtr<nsIContent> child = element->GetChildAt(i);
-
-            // Optimize for the <template> element, because we *know*
-            // it won't have any generated content: there's no reason
-            // to even check this subtree.
-            // XXX should this check |child| rather than |element|? Otherwise
-            //     it should be moved outside the inner loop. Bug 297290.
-            if (element->NodeInfo()->Equals(nsGkAtoms::_template,
-                                            kNameSpaceID_XUL) ||
-                !element->IsElement())
-                continue;
-
-            // If the element is in the template map, then we
-            // assume it's been generated and nuke it.
-            nsCOMPtr<nsIContent> tmpl;
-            mTemplateMap.GetTemplateFor(child, getter_AddRefs(tmpl));
-
-            if (! tmpl) {
-                // No 'template' attribute, so this must not have been
-                // generated. We'll need to examine its kids.
-                if (ungenerated.AppendElement(child) == nullptr)
-                    return NS_ERROR_OUT_OF_MEMORY;
-                continue;
-            }
-
-            // If we get here, it's "generated". Bye bye!
-            element->RemoveChildAt(i, true);
-
-            // Remove this and any children from the content support map.
-            mContentSupportMap.Remove(child);
-
-            // Remove from the template map
-            mTemplateMap.Remove(child);
-        }
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::GetElementsForResult(nsIXULTemplateResult* aResult,
-                                          nsCOMArray<Element>& aElements)
-{
-    // if the root has been removed from the document, just return
-    // since there won't be any generated content any more
-    nsCOMPtr<nsIXULDocument> xuldoc = do_QueryInterface(mRoot->GetComposedDoc());
-    if (! xuldoc)
-        return NS_OK;
-
-    nsAutoString id;
-    aResult->GetId(id);
-
-    xuldoc->GetElementsForID(id, aElements);
-
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::CreateElement(int32_t aNameSpaceID,
-                                   nsAtom* aTag,
-                                   Element** aResult)
-{
-    nsCOMPtr<nsIDocument> doc = mRoot->GetComposedDoc();
-    NS_ASSERTION(doc != nullptr, "not initialized");
-    if (! doc)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    RefPtr<mozilla::dom::NodeInfo> nodeInfo =
-        doc->NodeInfoManager()->GetNodeInfo(aTag, nullptr, aNameSpaceID,
-                                            nsIDOMNode::ELEMENT_NODE);
-
-    return NS_NewElement(aResult, nodeInfo.forget(), NOT_FROM_PARSER);
-}
-
-nsresult
-nsXULContentBuilder::SetContainerAttrs(Element* aElement,
-                                       nsIXULTemplateResult* aResult,
-                                       bool aIgnoreNonContainers,
-                                       bool aNotify)
-{
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    bool iscontainer;
-    aResult->GetIsContainer(&iscontainer);
-
-    if (aIgnoreNonContainers && !iscontainer)
-        return NS_OK;
-
-    NS_NAMED_LITERAL_STRING(true_, "true");
-    NS_NAMED_LITERAL_STRING(false_, "false");
-
-    const nsAString& newcontainer =
-        iscontainer ? true_ : false_;
-
-    aElement->SetAttr(kNameSpaceID_None, nsGkAtoms::container,
-                      newcontainer, aNotify);
-
-    if (iscontainer && !(mFlags & eDontTestEmpty)) {
-        bool isempty;
-        aResult->GetIsEmpty(&isempty);
-
-        const nsAString& newempty =
-            (iscontainer && isempty) ? true_ : false_;
-
-        aElement->SetAttr(kNameSpaceID_None, nsGkAtoms::empty,
-                          newempty, aNotify);
-    }
-
-    return NS_OK;
-}
-
-
-//----------------------------------------------------------------------
-//
-// nsIXULTemplateBuilder methods
-//
-
-NS_IMETHODIMP
-nsXULContentBuilder::CreateContents(Element* aElement, bool aForceCreation)
-{
-    NS_PRECONDITION(aElement != nullptr, "null ptr");
-    if (! aElement)
-        return NS_ERROR_NULL_POINTER;
-
-    // don't build contents for closed elements. aForceCreation will be true
-    // when a menu is about to be opened, so the content should be built anyway.
-    if (!aForceCreation && !IsOpen(aElement))
-        return NS_OK;
-
-    return CreateTemplateAndContainerContents(aElement, aForceCreation);
-}
-
-bool
-nsXULContentBuilder::HasGeneratedContent(nsIRDFResource* aResource,
-                                         const nsAString& aTag,
-                                         ErrorResult& aError)
-{
-    if (!mRoot || !mRootResult) {
-        aError.Throw(NS_ERROR_NOT_INITIALIZED);
-        return false;
-    }
-
-    nsCOMPtr<nsIRDFResource> rootresource;
-    aError = mRootResult->GetResource(getter_AddRefs(rootresource));
-    if (aError.Failed()) {
-        return false;
-    }
-
-    // the root resource is always acceptable
-    if (aResource == rootresource) {
-        return DOMStringIsNull(aTag) || mRoot->NodeInfo()->LocalName().Equals(aTag);
-    }
-
-    const char* uri;
-    aResource->GetValueConst(&uri);
-
-    NS_ConvertUTF8toUTF16 refID(uri);
-
-    // just return if the node is no longer in a document
-    nsCOMPtr<nsIXULDocument> xuldoc = do_QueryInterface(mRoot->GetComposedDoc());
-    if (!xuldoc) {
-        return false;
-    }
-
-    nsCOMArray<Element> elements;
-    xuldoc->GetElementsForID(refID, elements);
-
-    uint32_t cnt = elements.Count();
-
-    for (int32_t i = int32_t(cnt) - 1; i >= 0; --i) {
-        nsCOMPtr<nsIContent> content = elements.SafeObjectAt(i);
-
-        do {
-            nsTemplateMatch* match;
-            if (content == mRoot || mContentSupportMap.Get(content, &match)) {
-                // If we've got a tag, check it to ensure we're consistent.
-                if (DOMStringIsNull(aTag) || content->NodeInfo()->LocalName().Equals(aTag)) {
-                    return true;
-                }
-            }
-
-            content = content->GetParent();
-        } while (content);
-    }
-
-    return false;
-}
-
-nsIXULTemplateResult*
-nsXULContentBuilder::GetResultForContent(Element& aElement)
-{
-    if (&aElement == mRoot) {
-        return mRootResult;
-    }
-
-    nsTemplateMatch* match;
-    return mContentSupportMap.Get(&aElement, &match) ? match->mResult.get() : nullptr;
-}
-
-//----------------------------------------------------------------------
-//
-// nsIDocumentObserver methods
-//
-
-void
-nsXULContentBuilder::AttributeChanged(nsIDocument* aDocument,
-                                      Element*     aElement,
-                                      int32_t      aNameSpaceID,
-                                      nsAtom*     aAttribute,
-                                      int32_t      aModType,
-                                      const nsAttrValue* aOldValue)
-{
-    nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
-
-    // Handle "open" and "close" cases. We do this handling before
-    // we've notified the observer, so that content is already created
-    // for the frame system to walk.
-    if (aElement->GetNameSpaceID() == kNameSpaceID_XUL &&
-        aAttribute == nsGkAtoms::open) {
-        // We're on a XUL tag, and an ``open'' attribute changed.
-        if (aElement->AttrValueIs(kNameSpaceID_None, nsGkAtoms::open,
-                                  nsGkAtoms::_true, eCaseMatters))
-            OpenContainer(aElement);
-        else
-            CloseContainer(aElement);
-    }
-
-    if ((aNameSpaceID == kNameSpaceID_XUL) &&
-        ((aAttribute == nsGkAtoms::sort) ||
-         (aAttribute == nsGkAtoms::sortDirection) ||
-         (aAttribute == nsGkAtoms::sortResource) ||
-         (aAttribute == nsGkAtoms::sortResource2)))
-        mSortState.initialized = false;
-
-    // Pass along to the generic template builder.
-    nsXULTemplateBuilder::AttributeChanged(aDocument, aElement, aNameSpaceID,
-                                           aAttribute, aModType, aOldValue);
-}
-
-void
-nsXULContentBuilder::NodeWillBeDestroyed(const nsINode* aNode)
-{
-    nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
-    // Break circular references
-    mContentSupportMap.Clear();
-
-    nsXULTemplateBuilder::NodeWillBeDestroyed(aNode);
-}
-
-
-//----------------------------------------------------------------------
-//
-// nsXULTemplateBuilder methods
-//
-
-bool
-nsXULContentBuilder::GetInsertionLocations(nsIXULTemplateResult* aResult,
-                                           nsCOMArray<Element>** aLocations)
-{
-    *aLocations = nullptr;
-
-    nsAutoString ref;
-    nsresult rv = aResult->GetBindingFor(mRefVariable, ref);
-    if (NS_FAILED(rv))
-        return false;
-
-    nsCOMPtr<nsIXULDocument> xuldoc = do_QueryInterface(mRoot->GetComposedDoc());
-    if (! xuldoc)
-        return false;
-
-    *aLocations = new nsCOMArray<Element>;
-    NS_ENSURE_TRUE(*aLocations, false);
-
-    xuldoc->GetElementsForID(ref, **aLocations);
-    uint32_t count = (*aLocations)->Count();
-
-    bool found = false;
-
-    for (uint32_t t = 0; t < count; t++) {
-        nsCOMPtr<nsIContent> content = (*aLocations)->SafeObjectAt(t);
-
-        nsTemplateMatch* refmatch;
-        if (content == mRoot || mContentSupportMap.Get(content, &refmatch)) {
-            // See if we've built the container contents for "content"
-            // yet. If not, we don't need to build any content. This
-            // happens, for example, if we receive an assertion on a
-            // closed folder in a tree widget or on a menu that hasn't
-            // yet been opened.
-            nsXULElement *xulcontent = nsXULElement::FromContent(content);
-            if (!xulcontent || xulcontent->GetTemplateGenerated()) {
-                found = true;
-                continue;
-            }
-        }
-
-        // clear the item in the list since we don't want to insert there
-        (*aLocations)->ReplaceObjectAt(nullptr, t);
-    }
-
-    return found;
-}
-
-nsresult
-nsXULContentBuilder::ReplaceMatch(nsIXULTemplateResult* aOldResult,
-                                  nsTemplateMatch* aNewMatch,
-                                  nsTemplateRule* aNewMatchRule,
-                                  Element* aContext)
-
-{
-    nsresult rv;
-
-    // update the container attributes for the match
-    if (aContext) {
-        nsAutoString ref;
-        if (aNewMatch)
-            rv = aNewMatch->mResult->GetBindingFor(mRefVariable, ref);
-        else
-            rv = aOldResult->GetBindingFor(mRefVariable, ref);
-        if (NS_FAILED(rv))
-            return rv;
-
-        if (!ref.IsEmpty()) {
-            nsCOMPtr<nsIXULTemplateResult> refResult;
-            rv = GetResultForId(ref, getter_AddRefs(refResult));
-            if (NS_FAILED(rv))
-                return rv;
-
-            if (refResult)
-                SetContainerAttrs(aContext, refResult, false, true);
-        }
-    }
-
-    if (aOldResult) {
-        nsCOMArray<Element> elements;
-        rv = GetElementsForResult(aOldResult, elements);
-        if (NS_FAILED(rv))
-            return rv;
-
-        uint32_t count = elements.Count();
-
-        for (int32_t e = int32_t(count) - 1; e >= 0; --e) {
-            nsCOMPtr<nsIContent> child = elements.SafeObjectAt(e);
-
-            nsTemplateMatch* match;
-            if (mContentSupportMap.Get(child, &match)) {
-                if (aContext == match->GetContainer())
-                    RemoveMember(child);
-            }
-        }
-    }
-
-    if (aNewMatch) {
-        nsCOMPtr<nsIContent> action = aNewMatchRule->GetAction();
-        return BuildContentFromTemplate(action, aContext, aContext, true,
-                                        mRefVariable == aNewMatchRule->GetMemberVariable(),
-                                        aNewMatch->mResult, true, aNewMatch,
-                                        nullptr, nullptr);
-    }
-
-    return NS_OK;
-}
-
-
-nsresult
-nsXULContentBuilder::SynchronizeResult(nsIXULTemplateResult* aResult)
-{
-    nsCOMArray<Element> elements;
-    GetElementsForResult(aResult, elements);
-
-    uint32_t cnt = elements.Count();
-
-    for (int32_t i = int32_t(cnt) - 1; i >= 0; --i) {
-        nsCOMPtr<Element> element = elements.SafeObjectAt(i);
-
-        nsTemplateMatch* match;
-        if (! mContentSupportMap.Get(element, &match))
-            continue;
-
-        nsCOMPtr<nsIContent> templateNode;
-        mTemplateMap.GetTemplateFor(element, getter_AddRefs(templateNode));
-
-        NS_ASSERTION(templateNode, "couldn't find template node for element");
-        if (! templateNode)
-            continue;
-
-        // this node was created by a XUL template, so update it accordingly
-        SynchronizeUsingTemplate(templateNode, element, aResult);
-    }
-
-    return NS_OK;
-}
-
-//----------------------------------------------------------------------
-//
-// Implementation methods
-//
-
-nsresult
-nsXULContentBuilder::OpenContainer(Element* aElement)
-{
-    if (aElement != mRoot) {
-        if (mFlags & eDontRecurse)
-            return NS_OK;
-
-        bool rightBuilder = false;
-
-        nsCOMPtr<nsIXULDocument> xuldoc = do_QueryInterface(aElement->GetComposedDoc());
-        if (! xuldoc)
-            return NS_OK;
-
-        // See if we're responsible for this element
-        nsIContent* content = aElement;
-        do {
-            nsCOMPtr<nsIXULTemplateBuilder> builder;
-            xuldoc->GetTemplateBuilderFor(content, getter_AddRefs(builder));
-            if (builder) {
-                if (builder == this)
-                    rightBuilder = true;
-                break;
-            }
-
-            content = content->GetParent();
-        } while (content);
-
-        if (! rightBuilder)
-            return NS_OK;
-    }
-
-    CreateTemplateAndContainerContents(aElement, false);
-
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::CloseContainer(Element* aElement)
-{
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::RebuildAll()
-{
-    NS_ENSURE_TRUE(mRoot, NS_ERROR_NOT_INITIALIZED);
-
-    // Bail out early if we are being torn down.
-    nsCOMPtr<nsIDocument> doc = mRoot->GetComposedDoc();
-    if (!doc)
-        return NS_OK;
-
-    if (mQueriesCompiled)
-        Uninit(false);
-
-    nsresult rv = CompileQueries();
-    if (NS_FAILED(rv))
-        return rv;
-
-    if (mQuerySets.Length() == 0)
-        return NS_OK;
-
-    nsXULElement *xulcontent = nsXULElement::FromContent(mRoot);
-    if (xulcontent)
-        xulcontent->ClearTemplateGenerated();
-
-    // Now, regenerate both the template- and container-generated
-    // contents for the current element...
-    CreateTemplateAndContainerContents(mRoot, false);
-
-    return NS_OK;
-}
-
-/**** Sorting Methods ****/
-
-nsresult
-nsXULContentBuilder::CompareResultToNode(nsIXULTemplateResult* aResult,
-                                         nsIContent* aContent,
-                                         int32_t* aSortOrder)
-{
-    NS_ASSERTION(aSortOrder, "CompareResultToNode: null out param aSortOrder");
-
-    *aSortOrder = 0;
-
-    nsTemplateMatch *match = nullptr;
-    if (!mContentSupportMap.Get(aContent, &match)) {
-        *aSortOrder = mSortState.sortStaticsLast ? -1 : 1;
-        return NS_OK;
-    }
-
-    if (!mQueryProcessor)
-        return NS_OK;
-
-    if (mSortState.direction == nsSortState_natural) {
-        // sort in natural order
-        nsresult rv = mQueryProcessor->CompareResults(aResult, match->mResult,
-                                                      nullptr, mSortState.sortHints,
-                                                      aSortOrder);
-        NS_ENSURE_SUCCESS(rv, rv);
-    }
-    else {
-        // iterate over each sort key and compare. If the nodes are equal,
-        // continue to compare using the next sort key. If not equal, stop.
-        int32_t length = mSortState.sortKeys.Length();
-        for (int32_t t = 0; t < length; t++) {
-            nsresult rv = mQueryProcessor->CompareResults(aResult, match->mResult,
-                                                          mSortState.sortKeys[t],
-                                                          mSortState.sortHints, aSortOrder);
-            NS_ENSURE_SUCCESS(rv, rv);
-
-            if (*aSortOrder)
-                break;
-        }
-    }
-
-    // flip the sort order if performing a descending sorting
-    if (mSortState.direction == nsSortState_descending)
-        *aSortOrder = -*aSortOrder;
-
-    return NS_OK;
-}
-
-nsresult
-nsXULContentBuilder::InsertSortedNode(Element* aContainer,
-                                      nsIContent* aNode,
-                                      nsIXULTemplateResult* aResult,
-                                      bool aNotify)
-{
-    nsresult rv;
-
-    if (!mSortState.initialized) {
-        nsAutoString sort, sortDirection, sortHints;
-        mRoot->GetAttr(kNameSpaceID_None, nsGkAtoms::sort, sort);
-        mRoot->GetAttr(kNameSpaceID_None, nsGkAtoms::sortDirection, sortDirection);
-        mRoot->GetAttr(kNameSpaceID_None, nsGkAtoms::sorthints, sortHints);
-        sortDirection += ' ';
-        sortDirection += sortHints;
-        rv = XULSortServiceImpl::InitializeSortState(mRoot, aContainer,
-                                                     sort, sortDirection, &mSortState);
-        NS_ENSURE_SUCCESS(rv, rv);
-    }
-
-    // when doing a natural sort, items will typically be sorted according to
-    // the order they appear in the datasource. For RDF, cache whether the
-    // reference parent is an RDF Seq. That way, the items can be sorted in the
-    // order they are in the Seq.
-    mSortState.isContainerRDFSeq = false;
-    if (mSortState.direction == nsSortState_natural) {
-        nsCOMPtr<nsISupports> ref;
-        nsresult rv = aResult->GetBindingObjectFor(mRefVariable, getter_AddRefs(ref));
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        nsCOMPtr<nsIRDFResource> container = do_QueryInterface(ref);
-
-        if (container) {
-            rv = gRDFContainerUtils->IsSeq(mDB, container, &mSortState.isContainerRDFSeq);
-            NS_ENSURE_SUCCESS(rv, rv);
-        }
-    }
-
-    bool childAdded = false;
-    uint32_t numChildren = aContainer->GetChildCount();
-
-    if (mSortState.direction != nsSortState_natural ||
-        (mSortState.direction == nsSortState_natural && mSortState.isContainerRDFSeq))
-    {
-        // because numChildren gets modified
-        int32_t realNumChildren = numChildren;
-        nsIContent *child = nullptr;
-
-        // rjc says: determine where static XUL ends and generated XUL/RDF begins
-        int32_t staticCount = 0;
-
-        nsAutoString staticValue;
-        aContainer->GetAttr(kNameSpaceID_None, nsGkAtoms::staticHint, staticValue);
-        if (!staticValue.IsEmpty())
-        {
-            // found "static" XUL element count hint
-            nsresult strErr = NS_OK;
-            staticCount = staticValue.ToInteger(&strErr);
-            if (NS_FAILED(strErr))
-                staticCount = 0;
-        } else {
-            // compute the "static" XUL element count
-            for (nsIContent* child = aContainer->GetFirstChild();
-                 child;
-                 child = child->GetNextSibling()) {
-
-                if (nsContentUtils::HasNonEmptyAttr(child, kNameSpaceID_None,
-                                                    nsGkAtoms::_template))
-                    break;
-                else
-                    ++staticCount;
-            }
-
-            if (mSortState.sortStaticsLast) {
-                // indicate that static XUL comes after RDF-generated content by
-                // making negative
-                staticCount = -staticCount;
-            }
-
-            // save the "static" XUL element count hint
-            nsAutoString valueStr;
-            valueStr.AppendInt(staticCount);
-            aContainer->SetAttr(kNameSpaceID_None, nsGkAtoms::staticHint, valueStr, false);
-        }
-
-        if (staticCount <= 0) {
-            numChildren += staticCount;
-            staticCount = 0;
-        } else if (staticCount > (int32_t)numChildren) {
-            staticCount = numChildren;
-            numChildren -= staticCount;
-        }
-
-        // figure out where to insert the node when a sort order is being imposed
-        if (numChildren > 0) {
-            nsIContent *temp;
-            int32_t direction;
-
-            // rjc says: The following is an implementation of a fairly optimal
-            // binary search insertion sort... with interpolation at either end-point.
-
-            if (mSortState.lastWasFirst) {
-                child = aContainer->GetChildAt(staticCount);
-                temp = child;
-                rv = CompareResultToNode(aResult, temp, &direction);
-                if (direction < 0) {
-                    aContainer->InsertChildAt(aNode, staticCount, aNotify);
-                    childAdded = true;
-                } else
-                    mSortState.lastWasFirst = false;
-            } else if (mSortState.lastWasLast) {
-                child = aContainer->GetChildAt(realNumChildren - 1);
-                temp = child;
-                rv = CompareResultToNode(aResult, temp, &direction);
-                if (direction > 0) {
-                    aContainer->InsertChildAt(aNode, realNumChildren, aNotify);
-                    childAdded = true;
-                } else
-                    mSortState.lastWasLast = false;
-            }
-
-            int32_t left = staticCount + 1, right = realNumChildren, x;
-            while (!childAdded && right >= left) {
-                x = (left + right) / 2;
-                child = aContainer->GetChildAt(x - 1);
-                temp = child;
-
-                rv = CompareResultToNode(aResult, temp, &direction);
-                if ((x == left && direction < 0) ||
-                    (x == right && direction >= 0) ||
-                    left == right)
-                {
-                    int32_t thePos = (direction > 0 ? x : x - 1);
-                    aContainer->InsertChildAt(aNode, thePos, aNotify);
-                    childAdded = true;
-
-                    mSortState.lastWasFirst = (thePos == staticCount);
-                    mSortState.lastWasLast = (thePos >= realNumChildren);
-
-                    break;
-                }
-                if (direction < 0)
-                    right = x - 1;
-                else
-                    left = x + 1;
-            }
-        }
-    }
-
-    // if the child hasn't been inserted yet, just add it at the end. Note
-    // that an append isn't done as there may be static content afterwards.
-    if (!childAdded)
-        aContainer->InsertChildAt(aNode, numChildren, aNotify);
-
-    return NS_OK;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsXULResourceList.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// N.B., no include guard! We'll include this multiple times in some
-// files.
-
-XUL_RESOURCE(NC_child,  NC_NAMESPACE_URI "child");
-XUL_RESOURCE(NC_Folder, NC_NAMESPACE_URI "Folder");
-XUL_RESOURCE(NC_open,   NC_NAMESPACE_URI "open");
-
-XUL_LITERAL(true_, u"true");
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateBuilder.cpp
+++ /dev/null
@@ -1,2676 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  Builds content from a datasource using the XUL <template> tag.
-
-  TO DO
-
-  . Fix ContentTagTest's location in the network construction
-
-  To turn on logging for this module, set:
-
-    MOZ_LOG=nsXULTemplateBuilder:5
-
- */
-
-#include "nsAutoPtr.h"
-#include "nsCOMPtr.h"
-#include "nsCRT.h"
-#include "nsIContent.h"
-#include "nsIDOMElement.h"
-#include "nsIDOMNode.h"
-#include "nsIDOMDocument.h"
-#include "nsIDOMXULElement.h"
-#include "nsIDocument.h"
-#include "nsBindingManager.h"
-#include "nsIDOMNodeList.h"
-#include "nsIObserverService.h"
-#include "nsIRDFCompositeDataSource.h"
-#include "nsIRDFInferDataSource.h"
-#include "nsIRDFContainerUtils.h"
-#include "nsIXULDocument.h"
-#include "nsIXULTemplateBuilder.h"
-#include "nsIXULBuilderListener.h"
-#include "nsIRDFCompositeDataSource.h"
-#include "nsIRDFRemoteDataSource.h"
-#include "nsIRDFService.h"
-#include "nsIScriptContext.h"
-#include "nsIScriptGlobalObject.h"
-#include "nsIScriptSecurityManager.h"
-#include "nsIServiceManager.h"
-#include "nsISimpleEnumerator.h"
-#include "nsIMutableArray.h"
-#include "nsIURL.h"
-#include "nsIXPConnect.h"
-#include "nsContentCID.h"
-#include "nsNameSpaceManager.h"
-#include "nsRDFCID.h"
-#include "nsXULContentUtils.h"
-#include "nsString.h"
-#include "nsTArray.h"
-#include "nsTemplateMatch.h"
-#include "nsTemplateRule.h"
-#include "nsString.h"
-#include "nsWhitespaceTokenizer.h"
-#include "nsGkAtoms.h"
-#include "nsXULElement.h"
-#include "jsapi.h"
-#include "mozilla/Logging.h"
-#include "rdf.h"
-#include "PLDHashTable.h"
-#include "plhash.h"
-#include "nsPIDOMWindow.h"
-#include "nsIConsoleService.h"
-#include "nsNetUtil.h"
-#include "nsXULTemplateBuilder.h"
-#include "nsXULTemplateQueryProcessorRDF.h"
-#include "nsXULTemplateQueryProcessorXML.h"
-#include "nsXULTemplateQueryProcessorStorage.h"
-#include "nsContentUtils.h"
-#include "ChildIterator.h"
-#include "mozilla/dom/ScriptSettings.h"
-#include "mozilla/dom/XULTemplateBuilderBinding.h"
-#include "nsGlobalWindow.h"
-
-using namespace mozilla::dom;
-using namespace mozilla;
-
-//----------------------------------------------------------------------
-//
-// nsXULTemplateBuilder
-//
-
-nsrefcnt                  nsXULTemplateBuilder::gRefCnt = 0;
-nsIRDFService*            nsXULTemplateBuilder::gRDFService;
-nsIRDFContainerUtils*     nsXULTemplateBuilder::gRDFContainerUtils;
-nsIObserverService*       nsXULTemplateBuilder::gObserverService;
-
-LazyLogModule gXULTemplateLog("nsXULTemplateBuilder");
-
-#define NS_QUERY_PROCESSOR_CONTRACTID_PREFIX "@mozilla.org/xul/xul-query-processor;1?name="
-
-//----------------------------------------------------------------------
-//
-// nsXULTemplateBuilder methods
-//
-
-nsXULTemplateBuilder::nsXULTemplateBuilder(Element* aElement)
-    : mRoot(aElement),
-      mQueriesCompiled(false),
-      mFlags(0),
-      mTop(nullptr),
-      mObservedDocument(nullptr)
-{
-}
-
-void
-nsXULTemplateBuilder::DestroyMatchMap()
-{
-    for (auto iter = mMatchMap.Iter(); !iter.Done(); iter.Next()) {
-        nsTemplateMatch*& match = iter.Data();
-        // delete all the matches in the list
-        while (match) {
-            nsTemplateMatch* next = match->mNext;
-            nsTemplateMatch::Destroy(match, true);
-            match = next;
-        }
-
-        iter.Remove();
-    }
-}
-
-nsXULTemplateBuilder::~nsXULTemplateBuilder(void)
-{
-    Uninit(true);
-
-    if (--gRefCnt == 0) {
-        NS_IF_RELEASE(gRDFService);
-        NS_IF_RELEASE(gRDFContainerUtils);
-        NS_IF_RELEASE(gObserverService);
-    }
-}
-
-
-nsresult
-nsXULTemplateBuilder::InitGlobals()
-{
-    nsresult rv;
-
-    if (gRefCnt++ == 0) {
-        // Initialize the global shared reference to the service
-        // manager and get some shared resource objects.
-        NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
-        rv = CallGetService(kRDFServiceCID, &gRDFService);
-        if (NS_FAILED(rv))
-            return rv;
-
-        NS_DEFINE_CID(kRDFContainerUtilsCID, NS_RDFCONTAINERUTILS_CID);
-        rv = CallGetService(kRDFContainerUtilsCID, &gRDFContainerUtils);
-        if (NS_FAILED(rv))
-            return rv;
-
-        rv = CallGetService(NS_OBSERVERSERVICE_CONTRACTID, &gObserverService);
-        if (NS_FAILED(rv))
-            return rv;
-    }
-
-    return NS_OK;
-}
-
-void
-nsXULTemplateBuilder::StartObserving(nsIDocument* aDocument)
-{
-    aDocument->AddObserver(this);
-    mObservedDocument = aDocument;
-    gObserverService->AddObserver(this, DOM_WINDOW_DESTROYED_TOPIC, false);
-}
-
-void
-nsXULTemplateBuilder::StopObserving()
-{
-    MOZ_ASSERT(mObservedDocument);
-    mObservedDocument->RemoveObserver(this);
-    mObservedDocument = nullptr;
-    gObserverService->RemoveObserver(this, DOM_WINDOW_DESTROYED_TOPIC);
-}
-
-void
-nsXULTemplateBuilder::CleanUp(bool aIsFinal)
-{
-    for (int32_t q = mQuerySets.Length() - 1; q >= 0; q--) {
-        nsTemplateQuerySet* qs = mQuerySets[q];
-        delete qs;
-    }
-
-    mQuerySets.Clear();
-
-    DestroyMatchMap();
-
-    // Setting mQueryProcessor to null will close connections. This would be
-    // handled by the cycle collector, but we want to close them earlier.
-    if (aIsFinal)
-        mQueryProcessor = nullptr;
-}
-
-void
-nsXULTemplateBuilder::Uninit(bool aIsFinal)
-{
-    if (mObservedDocument && aIsFinal) {
-        StopObserving();
-    }
-
-    if (mQueryProcessor)
-        mQueryProcessor->Done();
-
-    CleanUp(aIsFinal);
-
-    mRootResult = nullptr;
-    mRefVariable = nullptr;
-    mMemberVariable = nullptr;
-
-    mQueriesCompiled = false;
-}
-
-NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULTemplateBuilder)
-
-NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsXULTemplateBuilder)
-    NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mDataSource)
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mDB)
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mCompDB)
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mRoot)
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mRootResult)
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mListeners)
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mQueryProcessor)
-    tmp->DestroyMatchMap();
-    for (uint32_t i = 0; i < tmp->mQuerySets.Length(); ++i) {
-        nsTemplateQuerySet* qs = tmp->mQuerySets[i];
-        delete qs;
-    }
-    tmp->mQuerySets.Clear();
-NS_IMPL_CYCLE_COLLECTION_UNLINK_END
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsXULTemplateBuilder)
-    if (tmp->mObservedDocument && !cb.WantAllTraces()) {
-        // The global observer service holds us alive.
-        return NS_SUCCESS_INTERRUPTED_TRAVERSE;
-    }
-
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDataSource)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDB)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCompDB)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mRoot)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mRootResult)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mListeners)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mQueryProcessor)
-
-    for (auto iter = tmp->mMatchMap.Iter(); !iter.Done(); iter.Next()) {
-        cb.NoteXPCOMChild(iter.Key());
-        nsTemplateMatch* match = iter.UserData();
-        while (match) {
-            cb.NoteXPCOMChild(match->GetContainer());
-            cb.NoteXPCOMChild(match->mResult);
-            match = match->mNext;
-        }
-    }
-
-    {
-      uint32_t i, count = tmp->mQuerySets.Length();
-      for (i = 0; i < count; ++i) {
-        nsTemplateQuerySet *set = tmp->mQuerySets[i];
-        cb.NoteXPCOMChild(set->mQueryNode);
-        cb.NoteXPCOMChild(set->mCompiledQuery);
-        uint16_t j, rulesCount = set->RuleCount();
-        for (j = 0; j < rulesCount; ++j) {
-          set->GetRuleAt(j)->Traverse(cb);
-        }
-      }
-    }
-    tmp->Traverse(cb);
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(nsXULTemplateBuilder)
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(nsXULTemplateBuilder)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(nsXULTemplateBuilder)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXULTemplateBuilder)
-  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-  NS_INTERFACE_MAP_ENTRY(nsIXULTemplateBuilder)
-  NS_INTERFACE_MAP_ENTRY(nsIDocumentObserver)
-  NS_INTERFACE_MAP_ENTRY(nsIMutationObserver)
-  NS_INTERFACE_MAP_ENTRY(nsIObserver)
-  NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIXULTemplateBuilder)
-NS_INTERFACE_MAP_END
-
-JSObject*
-nsXULTemplateBuilder::WrapObject(JSContext* aCx,
-                                 JS::Handle<JSObject*> aGivenProto)
-{
-    return XULTemplateBuilderBinding::Wrap(aCx, this, aGivenProto);
-}
-
-//----------------------------------------------------------------------
-//
-// nsIXULTemplateBuilder methods
-//
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::GetRoot(nsIDOMElement** aResult)
-{
-    nsCOMPtr<nsIDOMElement> result = do_QueryInterface(GetRoot());
-    result.forget(aResult);
-    return NS_OK;
-}
-
-nsISupports*
-nsXULTemplateBuilder::GetDatasource()
-{
-    return mCompDB ? mCompDB.get() : mDataSource.get();
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::GetDatasource(nsISupports** aResult)
-{
-    NS_IF_ADDREF(*aResult = GetDatasource());
-    return NS_OK;
-}
-
-void
-nsXULTemplateBuilder::SetDatasource(nsISupports* aDatasource,
-                                     ErrorResult& aError)
-{
-    mDataSource = aDatasource;
-    mCompDB = do_QueryInterface(mDataSource);
-
-    aError = Rebuild();
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::SetDatasource(nsISupports* aResult)
-{
-    ErrorResult rv;
-    SetDatasource(aResult, rv);
-    return rv.StealNSResult();
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::GetDatabase(nsIRDFCompositeDataSource** aResult)
-{
-    NS_IF_ADDREF(*aResult = GetDatabase());
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::GetQueryProcessor(nsIXULTemplateQueryProcessor** aResult)
-{
-    NS_IF_ADDREF(*aResult = mQueryProcessor.get());
-    return NS_OK;
-}
-
-void
-nsXULTemplateBuilder::AddRuleFilter(nsINode& aRule,
-                                    nsIXULTemplateRuleFilter* aFilter,
-                                    ErrorResult& aError)
-{
-    // a custom rule filter may be added, one for each rule. If a new one is
-    // added, it replaces the old one. Look for the right rule and set its
-    // filter
-
-    nsIDOMNode* ruleAsDOMNode = aRule.AsDOMNode();
-    int32_t count = mQuerySets.Length();
-    for (int32_t q = 0; q < count; q++) {
-        nsTemplateQuerySet* queryset = mQuerySets[q];
-
-        int16_t rulecount = queryset->RuleCount();
-        for (int16_t r = 0; r < rulecount; r++) {
-            nsTemplateRule* rule = queryset->GetRuleAt(r);
-
-            nsCOMPtr<nsIDOMNode> rulenode;
-            rule->GetRuleNode(getter_AddRefs(rulenode));
-            if (ruleAsDOMNode == rulenode) {
-                rule->SetRuleFilter(aFilter);
-                return;
-            }
-        }
-    }
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::AddRuleFilter(nsIDOMNode* aRule, nsIXULTemplateRuleFilter* aFilter)
-{
-    nsCOMPtr<nsINode> rule = do_QueryInterface(aRule);
-    if (!rule) {
-        return NS_ERROR_NULL_POINTER;
-    }
-
-    NS_ENSURE_ARG_POINTER(aFilter);
-
-    ErrorResult rv;
-    AddRuleFilter(*rule, aFilter, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTemplateBuilder::Rebuild(ErrorResult& aError)
-{
-    int32_t i;
-
-    for (i = mListeners.Length() - 1; i >= 0; --i) {
-        mListeners[i]->WillRebuild(this);
-    }
-
-    aError = RebuildAll();
-
-    for (i = mListeners.Length() - 1; i >= 0; --i) {
-        mListeners[i]->DidRebuild(this);
-    }
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::Rebuild()
-{
-    ErrorResult rv;
-    Rebuild(rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTemplateBuilder::Refresh(ErrorResult& aError)
-{
-    if (!mCompDB) {
-        aError.Throw(NS_ERROR_FAILURE);
-        return;
-    }
-
-    nsCOMPtr<nsISimpleEnumerator> dslist;
-    aError = mCompDB->GetDataSources(getter_AddRefs(dslist));
-    if (aError.Failed()) {
-        return;
-    }
-
-    bool hasMore;
-    nsCOMPtr<nsISupports> next;
-    nsCOMPtr<nsIRDFRemoteDataSource> rds;
-
-    while(NS_SUCCEEDED(dslist->HasMoreElements(&hasMore)) && hasMore) {
-        dslist->GetNext(getter_AddRefs(next));
-        if (next && (rds = do_QueryInterface(next))) {
-            rds->Refresh(false);
-        }
-    }
-
-    // XXXbsmedberg: it would be kinda nice to install an async nsIRDFXMLSink
-    // observer and call rebuild() once the load is complete. See bug 254600.
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::Refresh()
-{
-    ErrorResult rv;
-    Refresh(rv);
-    return rv.StealNSResult();
-}
-
-nsresult
-nsXULTemplateBuilder::Init()
-{
-    nsresult rv = InitGlobals();
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    nsCOMPtr<nsIDocument> doc = mRoot->GetComposedDoc();
-    NS_ASSERTION(doc, "element has no document");
-    if (! doc)
-        return NS_ERROR_UNEXPECTED;
-
-    bool shouldDelay;
-    rv = LoadDataSources(doc, &shouldDelay);
-
-    if (NS_SUCCEEDED(rv)) {
-        StartObserving(doc);
-    }
-
-    return rv;
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::CreateContents(Element* aElement, bool aForceCreation)
-{
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::HasGeneratedContent(nsIRDFResource* aResource,
-                                          nsAtom* aTag,
-                                          bool* aGenerated)
-{
-    ErrorResult rv;
-    const nsAString& tag = aTag ? nsDependentAtomString(aTag) : VoidString();
-    *aGenerated = HasGeneratedContent(aResource, tag, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTemplateBuilder::AddResult(nsIXULTemplateResult* aResult,
-                                nsINode& aQueryNode,
-                                ErrorResult& aError)
-{
-    aError = UpdateResult(nullptr, aResult, &aQueryNode);
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::AddResult(nsIXULTemplateResult* aResult,
-                                nsIDOMNode* aQueryNode)
-{
-    NS_ENSURE_ARG_POINTER(aResult);
-    NS_ENSURE_ARG_POINTER(aQueryNode);
-
-    ErrorResult rv;
-    nsCOMPtr<nsINode> queryNode = do_QueryInterface(aQueryNode);
-    AddResult(aResult, *queryNode, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTemplateBuilder::RemoveResult(nsIXULTemplateResult* aResult,
-                                   ErrorResult& aError)
-{
-    aError = UpdateResult(aResult, nullptr, nullptr);
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::RemoveResult(nsIXULTemplateResult* aResult)
-{
-    NS_ENSURE_ARG_POINTER(aResult);
-
-    ErrorResult rv;
-    RemoveResult(aResult, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTemplateBuilder::ReplaceResult(nsIXULTemplateResult* aOldResult,
-                                    nsIXULTemplateResult* aNewResult,
-                                    nsINode& aQueryNode,
-                                    ErrorResult& aError)
-{
-    aError = UpdateResult(aOldResult, nullptr, nullptr);
-    if (!aError.Failed()) {
-        aError = UpdateResult(nullptr, aNewResult, &aQueryNode);
-    }
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::ReplaceResult(nsIXULTemplateResult* aOldResult,
-                                    nsIXULTemplateResult* aNewResult,
-                                    nsIDOMNode* aQueryNode)
-{
-    NS_ENSURE_ARG_POINTER(aOldResult);
-    NS_ENSURE_ARG_POINTER(aNewResult);
-    NS_ENSURE_ARG_POINTER(aQueryNode);
-
-    nsCOMPtr<nsINode> queryNode = do_QueryInterface(aQueryNode);
-    ErrorResult rv;
-    ReplaceResult(aOldResult, aNewResult, *queryNode, rv);
-    return rv.StealNSResult();
-}
-
-nsresult
-nsXULTemplateBuilder::UpdateResult(nsIXULTemplateResult* aOldResult,
-                                   nsIXULTemplateResult* aNewResult,
-                                   nsINode* aQueryNode)
-{
-    MOZ_LOG(gXULTemplateLog, LogLevel::Info,
-           ("nsXULTemplateBuilder::UpdateResult %p %p %p",
-           aOldResult, aNewResult, aQueryNode));
-
-    if (!mRoot || !mQueriesCompiled)
-      return NS_OK;
-
-    // get the containers where content may be inserted. If
-    // GetInsertionLocations returns false, no container has generated
-    // any content yet so new content should not be generated either. This
-    // will be false if the result applies to content that is in a closed menu
-    // or treeitem for example.
-
-    nsAutoPtr<nsCOMArray<Element> > insertionPoints;
-    bool mayReplace = GetInsertionLocations(aOldResult ? aOldResult : aNewResult,
-                                              getter_Transfers(insertionPoints));
-    if (! mayReplace)
-        return NS_OK;
-
-    nsresult rv = NS_OK;
-
-    nsCOMPtr<nsIRDFResource> oldId, newId;
-    nsTemplateQuerySet* queryset = nullptr;
-
-    if (aOldResult) {
-        rv = GetResultResource(aOldResult, getter_AddRefs(oldId));
-        if (NS_FAILED(rv))
-            return rv;
-
-        // Ignore re-entrant builds for content that is currently in our
-        // activation stack.
-        if (IsActivated(oldId))
-            return NS_OK;
-    }
-
-    if (aNewResult) {
-        rv = GetResultResource(aNewResult, getter_AddRefs(newId));
-        if (NS_FAILED(rv))
-            return rv;
-
-        // skip results that don't have ids
-        if (! newId)
-            return NS_OK;
-
-        // Ignore re-entrant builds for content that is currently in our
-        // activation stack.
-        if (IsActivated(newId))
-            return NS_OK;
-
-        // look for the queryset associated with the supplied query node
-        nsCOMPtr<nsIContent> querycontent = do_QueryInterface(aQueryNode);
-
-        int32_t count = mQuerySets.Length();
-        for (int32_t q = 0; q < count; q++) {
-            nsTemplateQuerySet* qs = mQuerySets[q];
-            if (qs->mQueryNode == querycontent) {
-                queryset = qs;
-                break;
-            }
-        }
-
-        if (! queryset)
-            return NS_OK;
-    }
-
-    if (insertionPoints) {
-        // iterate over each insertion point and add or remove the result from
-        // that container
-        uint32_t count = insertionPoints->Count();
-        for (uint32_t t = 0; t < count; t++) {
-            nsCOMPtr<Element> insertionPoint = insertionPoints->SafeObjectAt(t);
-            if (insertionPoint) {
-                rv = UpdateResultInContainer(aOldResult, aNewResult, queryset,
-                                             oldId, newId, insertionPoint);
-                if (NS_FAILED(rv))
-                    return rv;
-            }
-        }
-    }
-    else {
-        // The tree builder doesn't use insertion points, so no insertion
-        // points will be set. In this case, just update the one result.
-        rv = UpdateResultInContainer(aOldResult, aNewResult, queryset,
-                                     oldId, newId, nullptr);
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateBuilder::UpdateResultInContainer(nsIXULTemplateResult* aOldResult,
-                                              nsIXULTemplateResult* aNewResult,
-                                              nsTemplateQuerySet* aQuerySet,
-                                              nsIRDFResource* aOldId,
-                                              nsIRDFResource* aNewId,
-                                              Element* aInsertionPoint)
-{
-    // This method takes a result that no longer applies (aOldResult) and
-    // replaces it with a new result (aNewResult). Either may be null
-    // indicating to just remove a result or add a new one without replacing.
-    //
-    // Matches are stored in the hashtable mMatchMap, keyed by result id. If
-    // there is more than one query, or the same id is found in different
-    // containers, the values in the hashtable will be a linked list of all
-    // the matches for that id. The matches are sorted according to the
-    // queries they are associated with. Matches for earlier queries in the
-    // template take priority over matches from later queries. The priority
-    // for a match is determined from the match's QuerySetPriority method.
-    // The first query has a priority 0, and higher numbers are for later
-    // queries with successively higher priorities. Thus, a match takes
-    // precedence if it has a lower priority than another. If there is only
-    // one query or container, then the match doesn't have any linked items.
-    //
-    // Matches are nsTemplateMatch objects. They are wrappers around
-    // nsIXULTemplateResult result objects and are created with
-    // nsTemplateMatch::Create below. The aQuerySet argument specifies which
-    // query the match is associated with.
-    //
-    // When a result id exists in multiple containers, the match's mContainer
-    // field is set to the container it corresponds to. The aInsertionPoint
-    // argument specifies which container is being updated. Even though they
-    // are stored in the same linked list as other matches of the same id, the
-    // matches for different containers are treated separately. They are only
-    // stored in the same hashtable to avoid a more complex data structure, as
-    // the use of the same id in multiple containers isn't a common occurance.
-    //
-    // Only one match with a given id per container is active at a time. When
-    // a match is active, content is generated for it. When a match is
-    // inactive, content is not generated for it. A match becomes active if
-    // another match with the same id and container with a lower priority
-    // isn't already active, and the match has a rule or conditions clause
-    // which evaluates to true. The former is checked by comparing the value
-    // of the QuerySetPriority method of the match with earlier matches. The
-    // latter is checked with the DetermineMatchedRule method.
-    //
-    // Naturally, if a match with a lower priority is active, it overrides
-    // the new match, so the new match is hooked up into the match linked
-    // list as inactive, and no content is generated for it. If a match with a
-    // higher priority is active, and the new match's conditions evaluate
-    // to true, then this existing match with the higher priority needs to have
-    // its generated content removed and replaced with the new match's
-    // generated content.
-    //
-    // Similar situations apply when removing an existing match. If the match
-    // is active, the existing generated content will need to be removed, and
-    // a match of higher priority that is revealed may become active and need
-    // to have content generated.
-    //
-    // Content removal and generation is done by the ReplaceMatch method which
-    // is overridden for the content builder and tree builder to update the
-    // generated output for each type.
-    //
-    // The code below handles all of the various cases and ensures that the
-    // match lists are maintained properly.
-
-    nsresult rv = NS_OK;
-    int16_t ruleindex;
-    nsTemplateRule* matchedrule = nullptr;
-
-    // Indicates that the old match was active and must have its content
-    // removed
-    bool oldMatchWasActive = false;
-
-    // acceptedmatch will be set to a new match that has to have new content
-    // generated for it. If a new match doesn't need to have content
-    // generated, (because for example, a match with a lower priority
-    // already applies), then acceptedmatch will be null, but the match will
-    // be still hooked up into the chain, since it may become active later
-    // as other results are updated.
-    nsTemplateMatch* acceptedmatch = nullptr;
-
-    // When aOldResult is specified, removematch will be set to the
-    // corresponding match. This match needs to be deleted as it no longer
-    // applies. However, removedmatch will be null when aOldResult is null, or
-    // when no match was found corresponding to aOldResult.
-    nsTemplateMatch* removedmatch = nullptr;
-
-    // These will be set when aNewResult is specified indicating to add a
-    // result, but will end up replacing an existing match. The former
-    // indicates a match being replaced that was active and had content
-    // generated for it, while the latter indicates a match that wasn't active
-    // and just needs to be deleted. Both may point to different matches. For
-    // example, if the new match becomes active, replacing an inactive match,
-    // the inactive match will need to be deleted. However, if another match
-    // with a higher priority is active, the new match will override it, so
-    // content will need to be generated for the new match and removed for
-    // this existing active match.
-    nsTemplateMatch* replacedmatch = nullptr;
-    nsTemplateMatch* replacedmatchtodelete = nullptr;
-
-    if (aOldResult) {
-        nsTemplateMatch* firstmatch;
-        if (mMatchMap.Get(aOldId, &firstmatch)) {
-            nsTemplateMatch* oldmatch = firstmatch;
-            nsTemplateMatch* prevmatch = nullptr;
-
-            // look for the right match if there was more than one
-            while (oldmatch && (oldmatch->mResult != aOldResult)) {
-                prevmatch = oldmatch;
-                oldmatch = oldmatch->mNext;
-            }
-
-            if (oldmatch) {
-                nsTemplateMatch* findmatch = oldmatch->mNext;
-
-                // Keep a reference so that linked list can be hooked up at
-                // the end in case an error occurs.
-                nsTemplateMatch* nextmatch = findmatch;
-
-                if (oldmatch->IsActive()) {
-                    // Indicate that the old match was active so its content
-                    // will be removed later.
-                    oldMatchWasActive = true;
-
-                    // The match being removed is the active match, so scan
-                    // through the later matches to determine if one should
-                    // now become the active match.
-                    while (findmatch) {
-                        // only other matches with the same container should
-                        // now match, leave other containers alone
-                        if (findmatch->GetContainer() == aInsertionPoint) {
-                            nsTemplateQuerySet* qs =
-                                mQuerySets[findmatch->QuerySetPriority()];
-
-                            DetermineMatchedRule(aInsertionPoint, findmatch->mResult,
-                                                 qs, &matchedrule, &ruleindex);
-
-                            if (matchedrule) {
-                                rv = findmatch->RuleMatched(qs,
-                                                            matchedrule, ruleindex,
-                                                            findmatch->mResult);
-                                if (NS_FAILED(rv))
-                                    return rv;
-
-                                acceptedmatch = findmatch;
-                                break;
-                            }
-                        }
-
-                        findmatch = findmatch->mNext;
-                    }
-                }
-
-                if (oldmatch == firstmatch) {
-                    // the match to remove is at the beginning
-                    if (oldmatch->mNext) {
-                        mMatchMap.Put(aOldId, oldmatch->mNext);
-                    }
-                    else {
-                        mMatchMap.Remove(aOldId);
-                    }
-                }
-
-                if (prevmatch)
-                    prevmatch->mNext = nextmatch;
-
-                removedmatch = oldmatch;
-                if (mFlags & eLoggingEnabled)
-                    OutputMatchToLog(aOldId, removedmatch, false);
-            }
-        }
-    }
-
-    nsTemplateMatch *newmatch = nullptr;
-    if (aNewResult) {
-        // only allow a result to be inserted into containers with a matching tag
-        nsAtom* tag = aQuerySet->GetTag();
-        if (aInsertionPoint && tag &&
-            tag != aInsertionPoint->NodeInfo()->NameAtom())
-            return NS_OK;
-
-        int32_t findpriority = aQuerySet->Priority();
-
-        newmatch = nsTemplateMatch::Create(findpriority,
-                                           aNewResult, aInsertionPoint);
-        if (!newmatch)
-            return NS_ERROR_OUT_OF_MEMORY;
-
-        nsTemplateMatch* firstmatch;
-        if (mMatchMap.Get(aNewId, &firstmatch)) {
-            bool hasEarlierActiveMatch = false;
-
-            // Scan through the existing matches to find where the new one
-            // should be inserted. oldmatch will be set to the old match for
-            // the same query and prevmatch will be set to the match before it.
-            nsTemplateMatch* prevmatch = nullptr;
-            nsTemplateMatch* oldmatch = firstmatch;
-            while (oldmatch) {
-                // Break out once we've reached a query in the list with a
-                // lower priority. The new match will be inserted at this
-                // location so that the match list is sorted by priority.
-                int32_t priority = oldmatch->QuerySetPriority();
-                if (priority > findpriority) {
-                    oldmatch = nullptr;
-                    break;
-                }
-
-                // look for matches that belong in the same container
-                if (oldmatch->GetContainer() == aInsertionPoint) {
-                    if (priority == findpriority)
-                        break;
-
-                    // If a match with a lower priority is active, the new
-                    // match can't replace it.
-                    if (oldmatch->IsActive())
-                        hasEarlierActiveMatch = true;
-                }
-
-                prevmatch = oldmatch;
-                oldmatch = oldmatch->mNext;
-            }
-
-            // At this point, oldmatch will either be null, or set to a match
-            // with the same container and priority. If set, oldmatch will
-            // need to be replaced by newmatch.
-
-            if (oldmatch)
-                newmatch->mNext = oldmatch->mNext;
-            else if (prevmatch)
-                newmatch->mNext = prevmatch->mNext;
-            else
-                newmatch->mNext = firstmatch;
-
-            // hasEarlierActiveMatch will be set to true if a match with a
-            // lower priority was found. The new match won't replace it in
-            // this case. If hasEarlierActiveMatch is false, then the new match
-            // may be become active if it matches one of the rules, and will
-            // generate output. It's also possible however, that a match with
-            // the same priority already exists, which means that the new match
-            // will replace the old one. In this case, oldmatch will be set to
-            // the old match. The content for the old match must be removed and
-            // content for the new match generated in its place.
-            if (! hasEarlierActiveMatch) {
-                // If the old match was the active match, set replacedmatch to
-                // indicate that it needs its content removed.
-                if (oldmatch) {
-                    if (oldmatch->IsActive())
-                        replacedmatch = oldmatch;
-                    replacedmatchtodelete = oldmatch;
-                }
-
-                // check if the new result matches the rules
-                rv = DetermineMatchedRule(aInsertionPoint, newmatch->mResult,
-                                          aQuerySet, &matchedrule, &ruleindex);
-                if (NS_FAILED(rv)) {
-                    nsTemplateMatch::Destroy(newmatch, false);
-                    return rv;
-                }
-
-                if (matchedrule) {
-                    rv = newmatch->RuleMatched(aQuerySet,
-                                               matchedrule, ruleindex,
-                                               newmatch->mResult);
-                    if (NS_FAILED(rv)) {
-                        nsTemplateMatch::Destroy(newmatch, false);
-                        return rv;
-                    }
-
-                    // acceptedmatch may have been set in the block handling
-                    // aOldResult earlier. If so, we would only get here when
-                    // that match has a higher priority than this new match.
-                    // As only one match can have content generated for it, it
-                    // is OK to set acceptedmatch here to the new match,
-                    // ignoring the other one.
-                    acceptedmatch = newmatch;
-
-                    // Clear the matched state of the later results for the
-                    // same container.
-                    nsTemplateMatch* clearmatch = newmatch->mNext;
-                    while (clearmatch) {
-                        if (clearmatch->GetContainer() == aInsertionPoint &&
-                            clearmatch->IsActive()) {
-                            clearmatch->SetInactive();
-                            // Replacedmatch should be null here. If not, it
-                            // means that two matches were active which isn't
-                            // a valid state
-                            NS_ASSERTION(!replacedmatch,
-                                         "replaced match already set");
-                            replacedmatch = clearmatch;
-                            break;
-                        }
-                        clearmatch = clearmatch->mNext;
-                    }
-                }
-                else if (oldmatch && oldmatch->IsActive()) {
-                    // The result didn't match the rules, so look for a later
-                    // one. However, only do this if the old match was the
-                    // active match.
-                    newmatch = newmatch->mNext;
-                    while (newmatch) {
-                        if (newmatch->GetContainer() == aInsertionPoint) {
-                            rv = DetermineMatchedRule(aInsertionPoint, newmatch->mResult,
-                                                      aQuerySet, &matchedrule, &ruleindex);
-                            if (NS_FAILED(rv)) {
-                                nsTemplateMatch::Destroy(newmatch, false);
-                                return rv;
-                            }
-
-                            if (matchedrule) {
-                                rv = newmatch->RuleMatched(aQuerySet,
-                                                           matchedrule, ruleindex,
-                                                           newmatch->mResult);
-                                if (NS_FAILED(rv)) {
-                                    nsTemplateMatch::Destroy(newmatch, false);
-                                    return rv;
-                                }
-
-                                acceptedmatch = newmatch;
-                                break;
-                            }
-                        }
-
-                        newmatch = newmatch->mNext;
-                    }
-                }
-
-                // put the match in the map if there isn't a previous match
-                if (! prevmatch) {
-                    mMatchMap.Put(aNewId, newmatch);
-                }
-            }
-
-            // hook up the match last in case an error occurs
-            if (prevmatch)
-                prevmatch->mNext = newmatch;
-        }
-        else {
-            // The id is not used in the hashtable yet so create a new match
-            // and add it to the hashtable.
-            rv = DetermineMatchedRule(aInsertionPoint, aNewResult,
-                                      aQuerySet, &matchedrule, &ruleindex);
-            if (NS_FAILED(rv)) {
-                nsTemplateMatch::Destroy(newmatch, false);
-                return rv;
-            }
-
-            if (matchedrule) {
-                rv = newmatch->RuleMatched(aQuerySet, matchedrule,
-                                           ruleindex, aNewResult);
-                if (NS_FAILED(rv)) {
-                    nsTemplateMatch::Destroy(newmatch, false);
-                    return rv;
-                }
-
-                acceptedmatch = newmatch;
-            }
-
-            mMatchMap.Put(aNewId, newmatch);
-        }
-    }
-
-    // The ReplaceMatch method is builder specific and removes the generated
-    // content for a match.
-
-    // Remove the content for a match that was active and needs to be replaced.
-    if (replacedmatch) {
-        rv = ReplaceMatch(replacedmatch->mResult, nullptr, nullptr,
-                          aInsertionPoint);
-
-        if (mFlags & eLoggingEnabled)
-            OutputMatchToLog(aNewId, replacedmatch, false);
-    }
-
-    // remove a match that needs to be deleted.
-    if (replacedmatchtodelete)
-        nsTemplateMatch::Destroy(replacedmatchtodelete, true);
-
-    // If the old match was active, the content for it needs to be removed.
-    // If the old match was not active, it shouldn't have had any content,
-    // so just pass null to ReplaceMatch. If acceptedmatch was set, then
-    // content needs to be generated for a new match.
-    if (oldMatchWasActive || acceptedmatch)
-        rv = ReplaceMatch(oldMatchWasActive ? aOldResult : nullptr,
-                          acceptedmatch, matchedrule, aInsertionPoint);
-
-    // delete the old match that was replaced
-    if (removedmatch)
-        nsTemplateMatch::Destroy(removedmatch, true);
-
-    if (mFlags & eLoggingEnabled && newmatch)
-        OutputMatchToLog(aNewId, newmatch, true);
-
-    return rv;
-}
-
-void
-nsXULTemplateBuilder::ResultBindingChanged(nsIXULTemplateResult* aResult,
-                                           ErrorResult& aError)
-{
-    // A binding update is used when only the values of the bindings have
-    // changed, so the same rule still applies. Just synchronize the content.
-    // The new result will have the new values.
-    if (mRoot && mQueriesCompiled) {
-        aError = SynchronizeResult(aResult);
-    }
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::ResultBindingChanged(nsIXULTemplateResult* aResult)
-{
-    NS_ENSURE_ARG_POINTER(aResult);
-
-    ErrorResult rv;
-    ResultBindingChanged(aResult, rv);
-    return rv.StealNSResult();
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::GetRootResult(nsIXULTemplateResult** aResult)
-{
-  NS_IF_ADDREF(*aResult = GetRootResult());
-  return NS_OK;
-}
-
-nsIXULTemplateResult*
-nsXULTemplateBuilder::GetResultForId(const nsAString& aId, ErrorResult& aError)
-{
-    if (aId.IsEmpty()) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return nullptr;
-    }
-
-    nsCOMPtr<nsIRDFResource> resource;
-    gRDFService->GetUnicodeResource(aId, getter_AddRefs(resource));
-
-    nsTemplateMatch* match;
-    if (mMatchMap.Get(resource, &match)) {
-        // find the active match
-        while (match) {
-            if (match->IsActive()) {
-                return match->mResult;
-            }
-            match = match->mNext;
-        }
-    }
-
-    return nullptr;
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::GetResultForId(const nsAString& aId,
-                                     nsIXULTemplateResult** aResult)
-{
-    ErrorResult rv;
-    NS_IF_ADDREF(*aResult = GetResultForId(aId, rv));
-    return rv.StealNSResult();
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::GetResultForContent(nsIDOMElement* aContent,
-                                          nsIXULTemplateResult** aResult)
-{
-    nsCOMPtr<Element> element = do_QueryInterface(aContent);
-    NS_ENSURE_TRUE(element, NS_ERROR_FAILURE);
-    NS_IF_ADDREF(*aResult = GetResultForContent(*element));
-    return NS_OK;
-}
-
-void
-nsXULTemplateBuilder::AddListener(XULBuilderListener& aListener)
-{
-    CallbackObjectHolder<XULBuilderListener, nsIXULBuilderListener>
-        holder(&aListener);
-    mListeners.AppendElement(holder.ToXPCOMCallback());
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::AddListener(nsIXULBuilderListener* aListener)
-{
-    NS_ENSURE_ARG(aListener);
-
-    if (!mListeners.AppendElement(aListener))
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    return NS_OK;
-}
-
-void
-nsXULTemplateBuilder::RemoveListener(XULBuilderListener& aListener)
-{
-    CallbackObjectHolder<XULBuilderListener, nsIXULBuilderListener>
-        holder(&aListener);
-    nsCOMPtr<nsIXULBuilderListener> listener(holder.ToXPCOMCallback());
-    mListeners.RemoveElement(listener);
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::RemoveListener(nsIXULBuilderListener* aListener)
-{
-    NS_ENSURE_ARG(aListener);
-
-    mListeners.RemoveElement(aListener);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateBuilder::Observe(nsISupports* aSubject,
-                              const char* aTopic,
-                              const char16_t* aData)
-{
-    // Uuuuber hack to clean up circular references that the cycle collector
-    // doesn't know about. See bug 394514.
-    if (!strcmp(aTopic, DOM_WINDOW_DESTROYED_TOPIC)) {
-        if (nsCOMPtr<mozIDOMWindow> window = do_QueryInterface(aSubject)) {
-            nsCOMPtr<nsIDocument> doc =
-                nsPIDOMWindowInner::From(window)->GetExtantDoc();
-            if (doc && doc == mObservedDocument)
-                NodeWillBeDestroyed(doc);
-        }
-    }
-    return NS_OK;
-}
-//----------------------------------------------------------------------
-//
-// nsIDocumentOberver interface
-//
-
-void
-nsXULTemplateBuilder::AttributeChanged(nsIDocument* aDocument,
-                                       Element*     aElement,
-                                       int32_t      aNameSpaceID,
-                                       nsAtom*     aAttribute,
-                                       int32_t      aModType,
-                                       const nsAttrValue* aOldValue)
-{
-    if (aElement == mRoot && aNameSpaceID == kNameSpaceID_None) {
-        // Check for a change to the 'ref' attribute on an atom, in which
-        // case we may need to nuke and rebuild the entire content model
-        // beneath the element.
-        if (aAttribute == nsGkAtoms::ref)
-          nsContentUtils::AddScriptRunner(
-            NewRunnableMethod("nsXULTemplateBuilder::RunnableRebuild",
-                              this,
-                              &nsXULTemplateBuilder::RunnableRebuild));
-
-        // Check for a change to the 'datasources' attribute. If so, setup
-        // mDB by parsing the new value and rebuild.
-        else if (aAttribute == nsGkAtoms::datasources) {
-          nsContentUtils::AddScriptRunner(
-            NewRunnableMethod("nsXULTemplateBuilder::RunnableLoadAndRebuild",
-                              this,
-                              &nsXULTemplateBuilder::RunnableLoadAndRebuild));
-        }
-    }
-}
-
-void
-nsXULTemplateBuilder::ContentRemoved(nsIDocument* aDocument,
-                                     nsIContent* aContainer,
-                                     nsIContent* aChild,
-                                     nsIContent* aPreviousSibling)
-{
-    if (mRoot && nsContentUtils::ContentIsDescendantOf(mRoot, aChild)) {
-        RefPtr<nsXULTemplateBuilder> kungFuDeathGrip(this);
-
-        if (mQueryProcessor)
-            mQueryProcessor->Done();
-
-        // Pass false to Uninit since content is going away anyway
-        nsContentUtils::AddScriptRunner(
-          NewRunnableMethod("nsXULTemplateBuilder::UninitFalse",
-                            this,
-                            &nsXULTemplateBuilder::UninitFalse));
-
-        MOZ_ASSERT(aDocument == mObservedDocument);
-        StopObserving();
-
-        nsCOMPtr<nsIXULDocument> xuldoc = do_QueryInterface(aDocument);
-        if (xuldoc)
-            xuldoc->SetTemplateBuilderFor(mRoot, nullptr);
-
-        // clear the template state when removing content so that template
-        // content will be regenerated again if the content is reinserted
-        nsXULElement *xulcontent = nsXULElement::FromContent(mRoot);
-        if (xulcontent)
-            xulcontent->ClearTemplateGenerated();
-
-        CleanUp(true);
-
-        mDB = nullptr;
-        mCompDB = nullptr;
-        mDataSource = nullptr;
-    }
-}
-
-void
-nsXULTemplateBuilder::NodeWillBeDestroyed(const nsINode* aNode)
-{
-    // The call to RemoveObserver could release the last reference to
-    // |this|, so hold another reference.
-    RefPtr<nsXULTemplateBuilder> kungFuDeathGrip(this);
-
-    // Break circular references
-    if (mQueryProcessor)
-        mQueryProcessor->Done();
-
-    mDataSource = nullptr;
-    mDB = nullptr;
-    mCompDB = nullptr;
-
-    nsContentUtils::AddScriptRunner(
-      NewRunnableMethod("nsXULTemplateBuilder::UninitTrue",
-                        this,
-                        &nsXULTemplateBuilder::UninitTrue));
-}
-
-
-
-
-//----------------------------------------------------------------------
-//
-// Implementation methods
-//
-
-nsresult
-nsXULTemplateBuilder::LoadDataSources(nsIDocument* aDocument,
-                                      bool* aShouldDelayBuilding)
-{
-    NS_PRECONDITION(mRoot != nullptr, "not initialized");
-
-    nsresult rv;
-    bool isRDFQuery = false;
-
-    // we'll set these again later, after we create a new composite ds
-    mDB = nullptr;
-    mCompDB = nullptr;
-    mDataSource = nullptr;
-
-    *aShouldDelayBuilding = false;
-
-    nsAutoString datasources;
-    mRoot->GetAttr(kNameSpaceID_None, nsGkAtoms::datasources, datasources);
-
-    nsAutoString querytype;
-    mRoot->GetAttr(kNameSpaceID_None, nsGkAtoms::querytype, querytype);
-
-    // create the query processor. The querytype attribute on the root element
-    // may be used to create one of a specific type.
-
-    // XXX should non-chrome be restricted to specific names?
-    if (querytype.IsEmpty())
-        querytype.AssignLiteral("rdf");
-
-    if (querytype.EqualsLiteral("rdf")) {
-        isRDFQuery = true;
-        mQueryProcessor = new nsXULTemplateQueryProcessorRDF();
-    }
-    else if (querytype.EqualsLiteral("xml")) {
-        mQueryProcessor = new nsXULTemplateQueryProcessorXML();
-    }
-    else if (querytype.EqualsLiteral("storage")) {
-        mQueryProcessor = new nsXULTemplateQueryProcessorStorage();
-    }
-    else {
-        nsAutoCString cid(NS_QUERY_PROCESSOR_CONTRACTID_PREFIX);
-        AppendUTF16toUTF8(querytype, cid);
-        mQueryProcessor = do_CreateInstance(cid.get(), &rv);
-
-        if (!mQueryProcessor) {
-            nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_INVALID_QUERYPROCESSOR);
-            return rv;
-        }
-    }
-
-    rv = LoadDataSourceUrls(aDocument, datasources,
-                            isRDFQuery, aShouldDelayBuilding);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    // Now set the database on the element, so that script writers can
-    // access it.
-    nsCOMPtr<nsIXULDocument> xuldoc = do_QueryInterface(aDocument);
-    if (xuldoc)
-        xuldoc->SetTemplateBuilderFor(mRoot, this);
-
-    if (!mRoot->IsXULElement()) {
-        // Hmm. This must be an HTML element. Try to set it as a
-        // JS property "by hand".
-        InitHTMLTemplateRoot();
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateBuilder::LoadDataSourceUrls(nsIDocument* aDocument,
-                                         const nsAString& aDataSources,
-                                         bool aIsRDFQuery,
-                                         bool* aShouldDelayBuilding)
-{
-    // Grab the doc's principal...
-    nsIPrincipal *docPrincipal = aDocument->NodePrincipal();
-
-    NS_ASSERTION(docPrincipal == mRoot->NodePrincipal(),
-                 "Principal mismatch?  Which one to use?");
-
-    bool isTrusted = docPrincipal->GetIsSystemPrincipal();
-
-    // Parse datasources: they are assumed to be a whitespace
-    // separated list of URIs; e.g.,
-    //
-    //     rdf:bookmarks rdf:history http://foo.bar.com/blah.cgi?baz=9
-    //
-    nsIURI *docurl = aDocument->GetDocumentURI();
-
-    nsCOMPtr<nsIMutableArray> uriList = do_CreateInstance(NS_ARRAY_CONTRACTID);
-    if (!uriList)
-        return NS_ERROR_FAILURE;
-
-    nsresult rv;
-    nsAutoString datasources(aDataSources);
-    uint32_t first = 0;
-    while (1) {
-        while (first < datasources.Length() && nsCRT::IsAsciiSpace(datasources.CharAt(first)))
-            ++first;
-
-        if (first >= datasources.Length())
-            break;
-
-        uint32_t last = first;
-        while (last < datasources.Length() && !nsCRT::IsAsciiSpace(datasources.CharAt(last)))
-            ++last;
-
-        nsAutoString uriStr;
-        datasources.Mid(uriStr, first, last - first);
-        first = last + 1;
-
-        // A special 'dummy' datasource
-        if (uriStr.EqualsLiteral("rdf:null"))
-            continue;
-
-        if (uriStr.CharAt(0) == '#') {
-            // ok, the datasource is certainly a node of the current document
-            nsCOMPtr<nsIDOMDocument> domdoc = do_QueryInterface(aDocument);
-            nsCOMPtr<nsIDOMElement> dsnode;
-
-            domdoc->GetElementById(Substring(uriStr, 1),
-                                   getter_AddRefs(dsnode));
-
-            if (dsnode)
-                uriList->AppendElement(dsnode);
-            continue;
-        }
-
-        // N.B. that `failure' (e.g., because it's an unknown
-        // protocol) leaves uriStr unaltered.
-        NS_MakeAbsoluteURI(uriStr, uriStr, docurl);
-
-        nsCOMPtr<nsIURI> uri;
-        rv = NS_NewURI(getter_AddRefs(uri), uriStr);
-        if (NS_FAILED(rv) || !uri)
-            continue; // Necko will barf if our URI is weird
-
-        // don't add the uri to the list if the document is not allowed to
-        // load it
-        if (!isTrusted && NS_FAILED(docPrincipal->CheckMayLoad(uri, true, false)))
-          continue;
-
-        uriList->AppendElement(uri);
-    }
-
-    nsCOMPtr<nsIDOMNode> rootNode = do_QueryInterface(mRoot);
-    rv = mQueryProcessor->GetDatasource(uriList,
-                                        rootNode,
-                                        isTrusted,
-                                        this,
-                                        aShouldDelayBuilding,
-                                        getter_AddRefs(mDataSource));
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    if (aIsRDFQuery && mDataSource) {
-        // check if we were given an inference engine type
-        nsCOMPtr<nsIRDFInferDataSource> inferDB = do_QueryInterface(mDataSource);
-        if (inferDB) {
-            nsCOMPtr<nsIRDFDataSource> ds;
-            inferDB->GetBaseDataSource(getter_AddRefs(ds));
-            if (ds)
-                mCompDB = do_QueryInterface(ds);
-        }
-
-        if (!mCompDB)
-            mCompDB = do_QueryInterface(mDataSource);
-
-        mDB = do_QueryInterface(mDataSource);
-    }
-
-    if (!mDB && isTrusted) {
-        gRDFService->GetDataSource("rdf:local-store", getter_AddRefs(mDB));
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateBuilder::InitHTMLTemplateRoot()
-{
-    // Use XPConnect and the JS APIs to whack mDB and this as the
-    // 'database' and 'builder' properties onto aElement.
-    nsresult rv;
-
-    nsCOMPtr<nsIDocument> doc = mRoot->GetComposedDoc();
-    NS_ASSERTION(doc, "no document");
-    if (! doc)
-        return NS_ERROR_UNEXPECTED;
-
-    nsCOMPtr<nsIScriptGlobalObject> global =
-      do_QueryInterface(doc->GetWindow());
-    if (! global)
-        return NS_ERROR_UNEXPECTED;
-
-    nsCOMPtr<nsIGlobalObject> innerWin =
-        do_QueryInterface(doc->GetInnerWindow());
-
-    // We are going to run script via JS_SetProperty, so we need a script entry
-    // point, but as this is XUL related it does not appear in the HTML spec.
-    AutoEntryScript aes(innerWin, "nsXULTemplateBuilder creation", true);
-    JSContext* jscontext = aes.cx();
-
-    JS::Rooted<JS::Value> v(jscontext);
-    rv = nsContentUtils::WrapNative(jscontext, mRoot, mRoot, &v);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    JS::Rooted<JSObject*> jselement(jscontext, v.toObjectOrNull());
-
-    if (mDB) {
-        // database
-        JS::Rooted<JS::Value> jsdatabase(jscontext);
-        rv = nsContentUtils::WrapNative(jscontext, mDB,
-                                        &NS_GET_IID(nsIRDFCompositeDataSource),
-                                        &jsdatabase);
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        bool ok = JS_SetProperty(jscontext, jselement, "database", jsdatabase);
-        NS_ASSERTION(ok, "unable to set database property");
-        if (! ok)
-            return NS_ERROR_FAILURE;
-    }
-
-    {
-        // builder
-        JS::Rooted<JS::Value> jsbuilder(jscontext);
-        rv = nsContentUtils::WrapNative(jscontext,
-                                        static_cast<nsIXULTemplateBuilder*>(this),
-                                        &NS_GET_IID(nsIXULTemplateBuilder),
-                                        &jsbuilder);
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        bool ok = JS_SetProperty(jscontext, jselement, "builder", jsbuilder);
-        if (! ok)
-            return NS_ERROR_FAILURE;
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateBuilder::DetermineMatchedRule(nsIContent *aContainer,
-                                           nsIXULTemplateResult* aResult,
-                                           nsTemplateQuerySet* aQuerySet,
-                                           nsTemplateRule** aMatchedRule,
-                                           int16_t *aRuleIndex)
-{
-    // iterate through the rules and look for one that the result matches
-    int16_t count = aQuerySet->RuleCount();
-    for (int16_t r = 0; r < count; r++) {
-        nsTemplateRule* rule = aQuerySet->GetRuleAt(r);
-        // If a tag was specified, it must match the tag of the container
-        // where content is being inserted.
-        nsAtom* tag = rule->GetTag();
-        if ((!aContainer || !tag ||
-             tag == aContainer->NodeInfo()->NameAtom()) &&
-            rule->CheckMatch(aResult)) {
-            *aMatchedRule = rule;
-            *aRuleIndex = r;
-            return NS_OK;
-        }
-    }
-
-    *aRuleIndex = -1;
-    *aMatchedRule = nullptr;
-    return NS_OK;
-}
-
-void
-nsXULTemplateBuilder::ParseAttribute(const nsAString& aAttributeValue,
-                                     void (*aVariableCallback)(nsXULTemplateBuilder*, const nsAString&, void*),
-                                     void (*aTextCallback)(nsXULTemplateBuilder*, const nsAString&, void*),
-                                     void* aClosure)
-{
-    nsAString::const_iterator done_parsing;
-    aAttributeValue.EndReading(done_parsing);
-
-    nsAString::const_iterator iter;
-    aAttributeValue.BeginReading(iter);
-
-    nsAString::const_iterator mark(iter), backup(iter);
-
-    for (; iter != done_parsing; backup = ++iter) {
-        // A variable is either prefixed with '?' (in the extended
-        // syntax) or "rdf:" (in the simple syntax).
-        bool isvar;
-        if (*iter == char16_t('?') && (++iter != done_parsing)) {
-            isvar = true;
-        }
-        else if ((*iter == char16_t('r') && (++iter != done_parsing)) &&
-                 (*iter == char16_t('d') && (++iter != done_parsing)) &&
-                 (*iter == char16_t('f') && (++iter != done_parsing)) &&
-                 (*iter == char16_t(':') && (++iter != done_parsing))) {
-            isvar = true;
-        }
-        else {
-            isvar = false;
-        }
-
-        if (! isvar) {
-            // It's not a variable, or we ran off the end of the
-            // string after the initial variable prefix. Since we may
-            // have slurped down some characters before realizing that
-            // fact, back up to the point where we started.
-            iter = backup;
-            continue;
-        }
-        else if (backup != mark && aTextCallback) {
-            // Okay, we've found a variable, and there's some vanilla
-            // text that's been buffered up. Flush it.
-            (*aTextCallback)(this, Substring(mark, backup), aClosure);
-        }
-
-        if (*iter == char16_t('?')) {
-            // Well, it was not really a variable, but "??". We use one
-            // question mark (the second one, actually) literally.
-            mark = iter;
-            continue;
-        }
-
-        // Construct a substring that is the symbol we need to look up
-        // in the rule's symbol table. The symbol is terminated by a
-        // space character, a caret, or the end of the string,
-        // whichever comes first.
-        nsAString::const_iterator first(backup);
-
-        char16_t c = 0;
-        while (iter != done_parsing) {
-            c = *iter;
-            if ((c == char16_t(' ')) || (c == char16_t('^')))
-                break;
-
-            ++iter;
-        }
-
-        nsAString::const_iterator last(iter);
-
-        // Back up so we don't consume the terminating character
-        // *unless* the terminating character was a caret: the caret
-        // means "concatenate with no space in between".
-        if (c != char16_t('^'))
-            --iter;
-
-        (*aVariableCallback)(this, Substring(first, last), aClosure);
-        mark = iter;
-        ++mark;
-    }
-
-    if (backup != mark && aTextCallback) {
-        // If there's any text left over, then fire the text callback
-        (*aTextCallback)(this, Substring(mark, backup), aClosure);
-    }
-}
-
-
-struct MOZ_STACK_CLASS SubstituteTextClosure {
-    SubstituteTextClosure(nsIXULTemplateResult* aResult, nsAString& aString)
-        : result(aResult), str(aString) {}
-
-    // some datasources are lazily initialized or modified while values are
-    // being retrieved, causing results to be removed. Due to this, hold a
-    // strong reference to the result.
-    nsCOMPtr<nsIXULTemplateResult> result;
-    nsAString& str;
-};
-
-nsresult
-nsXULTemplateBuilder::SubstituteText(nsIXULTemplateResult* aResult,
-                                     const nsAString& aAttributeValue,
-                                     nsAString& aString)
-{
-    // See if it's the special value "..."
-    if (aAttributeValue.EqualsLiteral("...")) {
-        aResult->GetId(aString);
-        return NS_OK;
-    }
-
-    // Reasonable guess at how big it should be
-    aString.SetCapacity(aAttributeValue.Length());
-
-    SubstituteTextClosure closure(aResult, aString);
-    ParseAttribute(aAttributeValue,
-                   SubstituteTextReplaceVariable,
-                   SubstituteTextAppendText,
-                   &closure);
-
-    return NS_OK;
-}
-
-
-void
-nsXULTemplateBuilder::SubstituteTextAppendText(nsXULTemplateBuilder* aThis,
-                                               const nsAString& aText,
-                                               void* aClosure)
-{
-    // Append aString to the closure's result
-    SubstituteTextClosure* c = static_cast<SubstituteTextClosure*>(aClosure);
-    c->str.Append(aText);
-}
-
-void
-nsXULTemplateBuilder::SubstituteTextReplaceVariable(nsXULTemplateBuilder* aThis,
-                                                    const nsAString& aVariable,
-                                                    void* aClosure)
-{
-    // Substitute the value for the variable and append to the
-    // closure's result.
-    SubstituteTextClosure* c = static_cast<SubstituteTextClosure*>(aClosure);
-
-    nsAutoString replacementText;
-
-    // The symbol "rdf:*" is special, and means "this guy's URI"
-    if (aVariable.EqualsLiteral("rdf:*")){
-        c->result->GetId(replacementText);
-    }
-    else {
-        // Got a variable; get the value it's assigned to
-        RefPtr<nsAtom> var = NS_Atomize(aVariable);
-        c->result->GetBindingFor(var, replacementText);
-    }
-
-    c->str += replacementText;
-}
-
-bool
-nsXULTemplateBuilder::IsTemplateElement(nsIContent* aContent)
-{
-    return aContent->NodeInfo()->Equals(nsGkAtoms::_template, kNameSpaceID_XUL);
-}
-
-nsresult
-nsXULTemplateBuilder::GetTemplateRoot(Element** aResult)
-{
-    NS_PRECONDITION(mRoot != nullptr, "not initialized");
-    if (! mRoot)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    // First, check and see if the root has a template attribute. This
-    // allows a template to be specified "out of line"; e.g.,
-    //
-    //   <window>
-    //     <foo template="MyTemplate">...</foo>
-    //     <template id="MyTemplate">...</template>
-    //   </window>
-    //
-    nsAutoString templateID;
-    mRoot->GetAttr(kNameSpaceID_None, nsGkAtoms::_template, templateID);
-
-    if (! templateID.IsEmpty()) {
-        nsCOMPtr<nsIDOMDocument> domDoc = do_QueryInterface(mRoot->GetComposedDoc());
-        if (! domDoc)
-            return NS_OK;
-
-        nsCOMPtr<nsIDOMElement> domElement;
-        domDoc->GetElementById(templateID, getter_AddRefs(domElement));
-
-        if (domElement) {
-            nsCOMPtr<Element> content = do_QueryInterface(domElement);
-            NS_ENSURE_STATE(content &&
-                            !nsContentUtils::ContentIsDescendantOf(mRoot,
-                                                                   content));
-            content.forget(aResult);
-            return NS_OK;
-        }
-    }
-
-    // If root node has no template attribute, then look for a child
-    // node which is a template tag.
-    for (nsIContent* child = mRoot->GetFirstChild();
-         child;
-         child = child->GetNextSibling()) {
-
-        if (IsTemplateElement(child)) {
-            NS_ADDREF(*aResult = child->AsElement());
-            return NS_OK;
-        }
-    }
-
-    // Look through the anonymous children as well. Although FlattenedChildIterator
-    // will find a template element that has been placed in an insertion point, many
-    // bindings do not have a specific insertion point for the template element, which
-    // would cause it to not be part of the flattened content tree. The check above to
-    // check the explicit children as well handles this case.
-    FlattenedChildIterator iter(mRoot);
-    for (nsIContent* child = iter.GetNextChild(); child; child = iter.GetNextChild()) {
-        if (IsTemplateElement(child)) {
-            NS_ADDREF(*aResult = child->AsElement());
-            return NS_OK;
-        }
-    }
-
-    *aResult = nullptr;
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateBuilder::CompileQueries()
-{
-    nsCOMPtr<Element> tmpl;
-    GetTemplateRoot(getter_AddRefs(tmpl));
-    if (! tmpl)
-        return NS_OK;
-
-    if (! mRoot)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    // Determine if there are any special settings we need to observe
-    mFlags = 0;
-
-    nsAutoString flags;
-    mRoot->GetAttr(kNameSpaceID_None, nsGkAtoms::flags, flags);
-
-    // if the dont-test-empty flag is set, containers should not be checked to
-    // see if they are empty. If dont-recurse is set, then don't process the
-    // template recursively and only show one level of results. The logging
-    // flag logs errors and results to the console, which is useful when
-    // debugging templates.
-    nsWhitespaceTokenizer tokenizer(flags);
-    while (tokenizer.hasMoreTokens()) {
-      const nsDependentSubstring& token(tokenizer.nextToken());
-      if (token.EqualsLiteral("dont-test-empty"))
-        mFlags |= eDontTestEmpty;
-      else if (token.EqualsLiteral("dont-recurse"))
-        mFlags |= eDontRecurse;
-      else if (token.EqualsLiteral("logging"))
-        mFlags |= eLoggingEnabled;
-    }
-
-    // always enable logging if the debug setting is used
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug))
-        mFlags |= eLoggingEnabled;
-
-    nsCOMPtr<nsIDOMNode> rootnode = do_QueryInterface(mRoot);
-    nsresult rv =
-        mQueryProcessor->InitializeForBuilding(mDataSource, this, rootnode);
-    if (NS_FAILED(rv))
-        return rv;
-
-    // Set the "container" and "member" variables, if the user has specified
-    // them. The container variable may be specified with the container
-    // attribute on the <template> and the member variable may be specified
-    // using the member attribute or the value of the uri attribute inside the
-    // first action body in the template. If not specified, the container
-    // variable defaults to '?uri' and the member variable defaults to '?' or
-    // 'rdf:*' for simple queries.
-
-    // For RDF queries, the container variable may also be set via the
-    // <content> tag.
-
-    nsAutoString containervar;
-    tmpl->GetAttr(kNameSpaceID_None, nsGkAtoms::container, containervar);
-
-    if (containervar.IsEmpty())
-        mRefVariable = NS_Atomize("?uri");
-    else
-        mRefVariable = NS_Atomize(containervar);
-
-    nsAutoString membervar;
-    tmpl->GetAttr(kNameSpaceID_None, nsGkAtoms::member, membervar);
-
-    if (membervar.IsEmpty())
-        mMemberVariable = nullptr;
-    else
-        mMemberVariable = NS_Atomize(membervar);
-
-    nsTemplateQuerySet* queryset = new nsTemplateQuerySet(0);
-    if (!mQuerySets.AppendElement(queryset)) {
-        delete queryset;
-        return NS_ERROR_OUT_OF_MEMORY;
-    }
-
-    bool canUseTemplate = false;
-    int32_t priority = 0;
-    rv = CompileTemplate(tmpl, queryset, false, &priority, &canUseTemplate);
-
-    if (NS_FAILED(rv) || !canUseTemplate) {
-        for (int32_t q = mQuerySets.Length() - 1; q >= 0; q--) {
-            nsTemplateQuerySet* qs = mQuerySets[q];
-            delete qs;
-        }
-        mQuerySets.Clear();
-    }
-
-    mQueriesCompiled = true;
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateBuilder::CompileTemplate(Element* aTemplate,
-                                      nsTemplateQuerySet* aQuerySet,
-                                      bool aIsQuerySet,
-                                      int32_t* aPriority,
-                                      bool* aCanUseTemplate)
-{
-    NS_ASSERTION(aQuerySet, "No queryset supplied");
-
-    nsresult rv = NS_OK;
-
-    bool isQuerySetMode = false;
-    bool hasQuerySet = false, hasRule = false, hasQuery = false;
-
-    for (nsIContent* rulenode = aTemplate->GetFirstChild();
-         rulenode;
-         rulenode = rulenode->GetNextSibling()) {
-
-        mozilla::dom::NodeInfo *ni = rulenode->NodeInfo();
-
-        // don't allow more queries than can be supported
-        if (*aPriority == INT16_MAX)
-            return NS_ERROR_FAILURE;
-
-        // XXXndeakin queryset isn't a good name for this tag since it only
-        //            ever contains one query
-        if (!aIsQuerySet && ni->Equals(nsGkAtoms::queryset, kNameSpaceID_XUL)) {
-            if (hasRule || hasQuery) {
-              nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_INVALID_QUERYSET);
-              continue;
-            }
-
-            isQuerySetMode = true;
-
-            // only create a queryset for those after the first since the
-            // first one is always created by CompileQueries
-            if (hasQuerySet) {
-                aQuerySet = new nsTemplateQuerySet(++*aPriority);
-
-                // once the queryset is appended to the mQuerySets list, it
-                // will be removed by CompileQueries if an error occurs
-                if (!mQuerySets.AppendElement(aQuerySet)) {
-                    delete aQuerySet;
-                    return NS_ERROR_OUT_OF_MEMORY;
-                }
-            }
-
-            hasQuerySet = true;
-
-            // Known to be a <xul:queryset>.
-            rv = CompileTemplate(rulenode->AsElement(), aQuerySet, true,
-                                 aPriority, aCanUseTemplate);
-            if (NS_FAILED(rv))
-                return rv;
-        }
-
-        // once a queryset is used, everything must be a queryset
-        if (isQuerySetMode)
-            continue;
-
-        if (ni->Equals(nsGkAtoms::rule, kNameSpaceID_XUL)) {
-            RefPtr<Element> action;
-            nsXULContentUtils::FindChildByTag(rulenode,
-                                              kNameSpaceID_XUL,
-                                              nsGkAtoms::action,
-                                              getter_AddRefs(action));
-
-            if (action){
-                RefPtr<nsAtom> memberVariable = mMemberVariable;
-                if (!memberVariable) {
-                    memberVariable = DetermineMemberVariable(action);
-                    if (!memberVariable) {
-                        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_NO_MEMBERVAR);
-                        continue;
-                    }
-                }
-
-                if (hasQuery) {
-                    RefPtr<nsAtom> tag;
-                    DetermineRDFQueryRef(aQuerySet->mQueryNode,
-                                         getter_AddRefs(tag));
-                    if (tag)
-                        aQuerySet->SetTag(tag);
-
-                    if (! aQuerySet->mCompiledQuery) {
-                        nsCOMPtr<nsIDOMNode> query(do_QueryInterface(aQuerySet->mQueryNode));
-
-                        rv = mQueryProcessor->CompileQuery(this, query,
-                                                           mRefVariable, memberVariable,
-                                                           getter_AddRefs(aQuerySet->mCompiledQuery));
-                        if (NS_FAILED(rv))
-                            return rv;
-                    }
-
-                    if (aQuerySet->mCompiledQuery) {
-                        // It's an element (we test it for <xul:rule>, plus it
-                        // has `action` as a kid).
-                        rv = CompileExtendedQuery(rulenode->AsElement(),
-                                                  action, memberVariable,
-                                                  aQuerySet);
-                        if (NS_FAILED(rv))
-                            return rv;
-
-                        *aCanUseTemplate = true;
-                    }
-                } else {
-                    // backwards-compatible RDF template syntax where there is
-                    // an <action> node but no <query> node. In this case,
-                    // use the conditions as if it was the query.
-
-                    RefPtr<Element> conditions;
-                    nsXULContentUtils::FindChildByTag(rulenode,
-                                                      kNameSpaceID_XUL,
-                                                      nsGkAtoms::conditions,
-                                                      getter_AddRefs(conditions));
-
-                    if (conditions) {
-                        // create a new queryset if one hasn't been created already
-                        if (hasQuerySet) {
-                            aQuerySet = new nsTemplateQuerySet(++*aPriority);
-                            if (!mQuerySets.AppendElement(aQuerySet)) {
-                                delete aQuerySet;
-                                return NS_ERROR_OUT_OF_MEMORY;
-                            }
-                        }
-
-                        RefPtr<nsAtom> tag;
-                        DetermineRDFQueryRef(conditions, getter_AddRefs(tag));
-                        if (tag)
-                            aQuerySet->SetTag(tag);
-
-                        hasQuerySet = true;
-
-                        nsCOMPtr<nsIDOMNode> conditionsnode(do_QueryInterface(conditions));
-
-                        aQuerySet->mQueryNode = conditions;
-                        rv = mQueryProcessor->CompileQuery(this, conditionsnode,
-                                                           mRefVariable,
-                                                           memberVariable,
-                                                           getter_AddRefs(aQuerySet->mCompiledQuery));
-                        if (NS_FAILED(rv))
-                            return rv;
-
-                        if (aQuerySet->mCompiledQuery) {
-                            // Known to be a <xul:rule>, plus known to have
-                            // kids.
-                            rv = CompileExtendedQuery(rulenode->AsElement(),
-                                                      action, memberVariable,
-                                                      aQuerySet);
-                            if (NS_FAILED(rv))
-                                return rv;
-
-                            *aCanUseTemplate = true;
-                        }
-                    }
-                }
-            } else {
-                if (hasQuery)
-                    continue;
-
-                // a new queryset must always be created in this case
-                if (hasQuerySet) {
-                    aQuerySet = new nsTemplateQuerySet(++*aPriority);
-                    if (!mQuerySets.AppendElement(aQuerySet)) {
-                        delete aQuerySet;
-                        return NS_ERROR_OUT_OF_MEMORY;
-                    }
-                }
-
-                hasQuerySet = true;
-
-                // Known to be a <xul:rule>.
-                rv = CompileSimpleQuery(rulenode->AsElement(), aQuerySet,
-                                        aCanUseTemplate);
-                if (NS_FAILED(rv))
-                    return rv;
-            }
-
-            hasRule = true;
-        } else if (ni->Equals(nsGkAtoms::query, kNameSpaceID_XUL)) {
-            if (hasQuery)
-              continue;
-
-            aQuerySet->mQueryNode = rulenode;
-            hasQuery = true;
-        } else if (ni->Equals(nsGkAtoms::action, kNameSpaceID_XUL)) {
-            // the query must appear before the action
-            if (! hasQuery)
-                continue;
-
-            RefPtr<nsAtom> tag;
-            DetermineRDFQueryRef(aQuerySet->mQueryNode, getter_AddRefs(tag));
-            if (tag)
-                aQuerySet->SetTag(tag);
-
-            RefPtr<nsAtom> memberVariable = mMemberVariable;
-            if (!memberVariable) {
-                memberVariable = DetermineMemberVariable(rulenode);
-                if (!memberVariable) {
-                    nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_NO_MEMBERVAR);
-                    continue;
-                }
-            }
-
-            nsCOMPtr<nsIDOMNode> query(do_QueryInterface(aQuerySet->mQueryNode));
-
-            rv = mQueryProcessor->CompileQuery(this, query,
-                                               mRefVariable, memberVariable,
-                                               getter_AddRefs(aQuerySet->mCompiledQuery));
-
-            if (aQuerySet->mCompiledQuery) {
-                nsTemplateRule* rule = aQuerySet->NewRule(aTemplate, rulenode, aQuerySet);
-                if (! rule)
-                    return NS_ERROR_OUT_OF_MEMORY;
-
-                rule->SetVars(mRefVariable, memberVariable);
-
-                *aCanUseTemplate = true;
-
-                return NS_OK;
-            }
-        }
-    }
-
-    if (! hasRule && ! hasQuery && ! hasQuerySet) {
-        // if no rules are specified in the template, then the contents of the
-        // <template> tag are the one-and-only template.
-        rv = CompileSimpleQuery(aTemplate, aQuerySet, aCanUseTemplate);
-     }
-
-    return rv;
-}
-
-nsresult
-nsXULTemplateBuilder::CompileExtendedQuery(Element* aRuleElement,
-                                           nsIContent* aActionElement,
-                                           nsAtom* aMemberVariable,
-                                           nsTemplateQuerySet* aQuerySet)
-{
-    // Compile an "extended" <template> rule. An extended rule may have
-    // a <conditions> child, an <action> child, and a <bindings> child.
-    nsresult rv;
-
-    nsTemplateRule* rule = aQuerySet->NewRule(aRuleElement, aActionElement, aQuerySet);
-    if (! rule)
-         return NS_ERROR_OUT_OF_MEMORY;
-
-    RefPtr<Element> conditions;
-    nsXULContentUtils::FindChildByTag(aRuleElement,
-                                      kNameSpaceID_XUL,
-                                      nsGkAtoms::conditions,
-                                      getter_AddRefs(conditions));
-
-    // allow the conditions to be placed directly inside the rule
-    if (!conditions)
-        conditions = aRuleElement;
-
-    rv = CompileConditions(rule, conditions);
-    // If the rule compilation failed, then we have to bail.
-    if (NS_FAILED(rv)) {
-        aQuerySet->RemoveRule(rule);
-        return rv;
-    }
-
-    rule->SetVars(mRefVariable, aMemberVariable);
-
-    // If we've got bindings, add 'em.
-    RefPtr<Element> bindings;
-    nsXULContentUtils::FindChildByTag(aRuleElement,
-                                      kNameSpaceID_XUL,
-                                      nsGkAtoms::bindings,
-                                      getter_AddRefs(bindings));
-
-    // allow bindings to be placed directly inside rule
-    if (!bindings)
-        bindings = aRuleElement;
-
-    rv = CompileBindings(rule, bindings);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    return NS_OK;
-}
-
-already_AddRefed<nsAtom>
-nsXULTemplateBuilder::DetermineMemberVariable(nsIContent* aElement)
-{
-    // recursively iterate over the children looking for an element
-    // with uri="?..."
-    for (nsIContent* child = aElement->GetFirstChild();
-         child;
-         child = child->GetNextSibling()) {
-        nsAutoString uri;
-        if (child->IsElement()) {
-          child->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::uri, uri);
-        }
-        if (!uri.IsEmpty() && uri[0] == char16_t('?')) {
-            return NS_Atomize(uri);
-        }
-
-        RefPtr<nsAtom> result = DetermineMemberVariable(child);
-        if (result) {
-            return result.forget();
-        }
-    }
-
-    return nullptr;
-}
-
-void
-nsXULTemplateBuilder::DetermineRDFQueryRef(nsIContent* aQueryElement, nsAtom** aTag)
-{
-    // check for a tag
-    RefPtr<Element> content;
-    nsXULContentUtils::FindChildByTag(aQueryElement,
-                                      kNameSpaceID_XUL,
-                                      nsGkAtoms::content,
-                                      getter_AddRefs(content));
-
-    if (! content) {
-        // look for older treeitem syntax as well
-        nsXULContentUtils::FindChildByTag(aQueryElement,
-                                          kNameSpaceID_XUL,
-                                          nsGkAtoms::treeitem,
-                                          getter_AddRefs(content));
-    }
-
-    if (content) {
-        nsAutoString uri;
-        content->GetAttr(kNameSpaceID_None, nsGkAtoms::uri, uri);
-
-        if (!uri.IsEmpty())
-            mRefVariable = NS_Atomize(uri);
-
-        nsAutoString tag;
-        content->GetAttr(kNameSpaceID_None, nsGkAtoms::tag, tag);
-
-        if (!tag.IsEmpty())
-            *aTag = NS_Atomize(tag).take();
-    }
-}
-
-nsresult
-nsXULTemplateBuilder::CompileSimpleQuery(Element* aRuleElement,
-                                         nsTemplateQuerySet* aQuerySet,
-                                         bool* aCanUseTemplate)
-{
-    // compile a simple query, which is a query with no <query> or
-    // <conditions>. This means that a default query is used.
-    nsCOMPtr<nsIDOMNode> query(do_QueryInterface(aRuleElement));
-
-    RefPtr<nsAtom> memberVariable;
-    if (mMemberVariable)
-        memberVariable = mMemberVariable;
-    else
-        memberVariable = NS_Atomize("rdf:*");
-
-    // since there is no <query> node for a simple query, the query node will
-    // be either the <rule> node if multiple rules are used, or the <template> node.
-    aQuerySet->mQueryNode = aRuleElement;
-    nsresult rv = mQueryProcessor->CompileQuery(this, query,
-                                                mRefVariable, memberVariable,
-                                                getter_AddRefs(aQuerySet->mCompiledQuery));
-    if (NS_FAILED(rv))
-        return rv;
-
-    if (! aQuerySet->mCompiledQuery) {
-        *aCanUseTemplate = false;
-        return NS_OK;
-    }
-
-    nsTemplateRule* rule = aQuerySet->NewRule(aRuleElement, aRuleElement, aQuerySet);
-    if (! rule)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    rule->SetVars(mRefVariable, memberVariable);
-
-    nsAutoString tag;
-    aRuleElement->GetAttr(kNameSpaceID_None, nsGkAtoms::parent, tag);
-
-    if (!tag.IsEmpty()) {
-        RefPtr<nsAtom> tagatom = NS_Atomize(tag);
-        aQuerySet->SetTag(tagatom);
-    }
-
-    *aCanUseTemplate = true;
-
-    return AddSimpleRuleBindings(rule, aRuleElement);
-}
-
-nsresult
-nsXULTemplateBuilder::CompileConditions(nsTemplateRule* aRule,
-                                        Element* aCondition)
-{
-    nsAutoString tag;
-    aCondition->GetAttr(kNameSpaceID_None, nsGkAtoms::parent, tag);
-
-    if (!tag.IsEmpty()) {
-        RefPtr<nsAtom> tagatom = NS_Atomize(tag);
-        aRule->SetTag(tagatom);
-    }
-
-    nsTemplateCondition* currentCondition = nullptr;
-
-    for (nsIContent* node = aCondition->GetFirstChild();
-         node;
-         node = node->GetNextSibling()) {
-
-        if (node->NodeInfo()->Equals(nsGkAtoms::where, kNameSpaceID_XUL)) {
-            nsresult rv =
-              CompileWhereCondition(aRule, node->AsElement(), &currentCondition);
-            if (NS_FAILED(rv))
-                return rv;
-        }
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateBuilder::CompileWhereCondition(nsTemplateRule* aRule,
-                                            Element* aCondition,
-                                            nsTemplateCondition** aCurrentCondition)
-{
-    // Compile a <where> condition, which must be of the form:
-    //
-    //   <where subject="?var1|string" rel="relation" value="?var2|string" />
-    //
-    //    The value of rel may be:
-    //      equal - subject must be equal to object
-    //      notequal - subject must not be equal to object
-    //      less - subject must be less than object
-    //      greater - subject must be greater than object
-    //      startswith - subject must start with object
-    //      endswith - subject must end with object
-    //      contains - subject must contain object
-    //    Comparisons are done as strings unless the subject is an integer.
-
-    // subject
-    nsAutoString subject;
-    aCondition->GetAttr(kNameSpaceID_None, nsGkAtoms::subject, subject);
-    if (subject.IsEmpty()) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_WHERE_NO_SUBJECT);
-        return NS_OK;
-    }
-
-    RefPtr<nsAtom> svar;
-    if (subject[0] == char16_t('?'))
-        svar = NS_Atomize(subject);
-
-    nsAutoString relstring;
-    aCondition->GetAttr(kNameSpaceID_None, nsGkAtoms::rel, relstring);
-    if (relstring.IsEmpty()) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_WHERE_NO_RELATION);
-        return NS_OK;
-    }
-
-    // object
-    nsAutoString value;
-    aCondition->GetAttr(kNameSpaceID_None, nsGkAtoms::value, value);
-    if (value.IsEmpty()) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_WHERE_NO_VALUE);
-        return NS_OK;
-    }
-
-    // multiple
-    bool shouldMultiple =
-      aCondition->AttrValueIs(kNameSpaceID_None, nsGkAtoms::multiple,
-                              nsGkAtoms::_true, eCaseMatters);
-
-    RefPtr<nsAtom> vvar;
-    if (!shouldMultiple && (value[0] == char16_t('?'))) {
-        vvar = NS_Atomize(value);
-    }
-
-    // ignorecase
-    bool shouldIgnoreCase =
-      aCondition->AttrValueIs(kNameSpaceID_None, nsGkAtoms::ignorecase,
-                              nsGkAtoms::_true, eCaseMatters);
-
-    // negate
-    bool shouldNegate =
-      aCondition->AttrValueIs(kNameSpaceID_None, nsGkAtoms::negate,
-                              nsGkAtoms::_true, eCaseMatters);
-
-    nsTemplateCondition* condition;
-
-    if (svar && vvar) {
-        condition = new nsTemplateCondition(svar, relstring, vvar,
-                                            shouldIgnoreCase, shouldNegate);
-    }
-    else if (svar && !value.IsEmpty()) {
-        condition = new nsTemplateCondition(svar, relstring, value,
-                                            shouldIgnoreCase, shouldNegate, shouldMultiple);
-    }
-    else if (vvar) {
-        condition = new nsTemplateCondition(subject, relstring, vvar,
-                                            shouldIgnoreCase, shouldNegate);
-    }
-    else {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_WHERE_NO_VAR);
-        return NS_OK;
-    }
-
-    if (*aCurrentCondition) {
-        (*aCurrentCondition)->SetNext(condition);
-    }
-    else {
-        aRule->SetCondition(condition);
-    }
-
-    *aCurrentCondition = condition;
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateBuilder::CompileBindings(nsTemplateRule* aRule, nsIContent* aBindings)
-{
-    // Add an extended rule's bindings.
-    nsresult rv;
-
-    for (nsIContent* binding = aBindings->GetFirstChild();
-         binding;
-         binding = binding->GetNextSibling()) {
-
-        if (binding->NodeInfo()->Equals(nsGkAtoms::binding,
-                                        kNameSpaceID_XUL)) {
-            rv = CompileBinding(aRule, binding->AsElement());
-            if (NS_FAILED(rv))
-                return rv;
-        }
-    }
-
-    aRule->AddBindingsToQueryProcessor(mQueryProcessor);
-
-    return NS_OK;
-}
-
-
-nsresult
-nsXULTemplateBuilder::CompileBinding(nsTemplateRule* aRule,
-                                     Element* aBinding)
-{
-    // Compile a <binding> "condition", which must be of the form:
-    //
-    //   <binding subject="?var1"
-    //            predicate="resource"
-    //            object="?var2" />
-    //
-    // XXXwaterson Some day it would be cool to allow the 'predicate'
-    // to be bound to a variable.
-
-    // subject
-    nsAutoString subject;
-    aBinding->GetAttr(kNameSpaceID_None, nsGkAtoms::subject, subject);
-    if (subject.IsEmpty()) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_BINDING_BAD_SUBJECT);
-        return NS_OK;
-    }
-
-    RefPtr<nsAtom> svar;
-    if (subject[0] == char16_t('?')) {
-        svar = NS_Atomize(subject);
-    }
-    else {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_BINDING_BAD_SUBJECT);
-        return NS_OK;
-    }
-
-    // predicate
-    nsAutoString predicate;
-    aBinding->GetAttr(kNameSpaceID_None, nsGkAtoms::predicate, predicate);
-    if (predicate.IsEmpty()) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_BINDING_BAD_PREDICATE);
-        return NS_OK;
-    }
-
-    // object
-    nsAutoString object;
-    aBinding->GetAttr(kNameSpaceID_None, nsGkAtoms::object, object);
-
-    if (object.IsEmpty()) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_BINDING_BAD_OBJECT);
-        return NS_OK;
-    }
-
-    RefPtr<nsAtom> ovar;
-    if (object[0] == char16_t('?')) {
-        ovar = NS_Atomize(object);
-    }
-    else {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_BINDING_BAD_OBJECT);
-        return NS_OK;
-    }
-
-    return aRule->AddBinding(svar, predicate, ovar);
-}
-
-nsresult
-nsXULTemplateBuilder::AddSimpleRuleBindings(nsTemplateRule* aRule,
-                                            Element* aElement)
-{
-    // Crawl the content tree of a "simple" rule, adding a variable
-    // assignment for any attribute whose value is "rdf:".
-
-    AutoTArray<Element*, 8> elements;
-
-    if (elements.AppendElement(aElement) == nullptr)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    while (elements.Length()) {
-        // Pop the next element off the stack
-        uint32_t i = elements.Length() - 1;
-        Element* element = elements[i];
-        elements.RemoveElementAt(i);
-
-        // Iterate through its attributes, looking for substitutions
-        // that we need to add as bindings.
-        uint32_t count = element->GetAttrCount();
-
-        for (i = 0; i < count; ++i) {
-            const nsAttrName* name = element->GetAttrNameAt(i);
-
-            if (!name->Equals(nsGkAtoms::id, kNameSpaceID_None) &&
-                !name->Equals(nsGkAtoms::uri, kNameSpaceID_None)) {
-                nsAutoString value;
-                element->GetAttr(name->NamespaceID(), name->LocalName(), value);
-
-                // Scan the attribute for variables, adding a binding for
-                // each one.
-                ParseAttribute(value, AddBindingsFor, nullptr, aRule);
-            }
-        }
-
-        // Push kids onto the stack, and search them next.
-        for (nsIContent* child = element->GetLastChild();
-             child;
-             child = child->GetPreviousSibling()) {
-            if (!child->IsElement())
-                continue;
-
-            if (!elements.AppendElement(child->AsElement()))
-                return NS_ERROR_OUT_OF_MEMORY;
-        }
-    }
-
-    aRule->AddBindingsToQueryProcessor(mQueryProcessor);
-
-    return NS_OK;
-}
-
-void
-nsXULTemplateBuilder::AddBindingsFor(nsXULTemplateBuilder* aThis,
-                                     const nsAString& aVariable,
-                                     void* aClosure)
-{
-    // We should *only* be recieving "rdf:"-style variables. Make
-    // sure...
-    if (!StringBeginsWith(aVariable, NS_LITERAL_STRING("rdf:")))
-        return;
-
-    nsTemplateRule* rule = static_cast<nsTemplateRule*>(aClosure);
-
-    RefPtr<nsAtom> var = NS_Atomize(aVariable);
-
-    // Strip it down to the raw RDF property by clobbering the "rdf:"
-    // prefix
-    nsAutoString property;
-    property.Assign(Substring(aVariable, uint32_t(4), aVariable.Length() - 4));
-
-    if (! rule->HasBinding(rule->GetMemberVariable(), property, var))
-        // In the simple syntax, the binding is always from the
-        // member variable, through the property, to the target.
-        rule->AddBinding(rule->GetMemberVariable(), property, var);
-}
-
-bool
-nsXULTemplateBuilder::IsActivated(nsIRDFResource *aResource)
-{
-    for (ActivationEntry *entry = mTop;
-         entry != nullptr;
-         entry = entry->mPrevious) {
-        if (entry->mResource == aResource)
-            return true;
-    }
-    return false;
-}
-
-nsresult
-nsXULTemplateBuilder::GetResultResource(nsIXULTemplateResult* aResult,
-                                        nsIRDFResource** aResource)
-{
-    // get the resource for a result by checking its resource property. If it
-    // is not set, check the id. This allows non-chrome implementations to
-    // avoid having to use RDF.
-    nsresult rv = aResult->GetResource(aResource);
-    if (NS_FAILED(rv))
-        return rv;
-
-    if (! *aResource) {
-        nsAutoString id;
-        rv = aResult->GetId(id);
-        if (NS_FAILED(rv))
-            return rv;
-
-        return gRDFService->GetUnicodeResource(id, aResource);
-    }
-
-    return rv;
-}
-
-
-void
-nsXULTemplateBuilder::OutputMatchToLog(nsIRDFResource* aId,
-                                       nsTemplateMatch* aMatch,
-                                       bool aIsNew)
-{
-    int32_t priority = aMatch->QuerySetPriority() + 1;
-    int32_t activePriority = -1;
-
-    nsAutoString msg;
-
-    nsAutoString templateid;
-    mRoot->GetAttr(kNameSpaceID_None, nsGkAtoms::id, templateid);
-    msg.AppendLiteral("In template");
-    if (!templateid.IsEmpty()) {
-        msg.AppendLiteral(" with id ");
-        msg.Append(templateid);
-    }
-
-    nsAutoString refstring;
-    aMatch->mResult->GetBindingFor(mRefVariable, refstring);
-    if (!refstring.IsEmpty()) {
-        msg.AppendLiteral(" using ref ");
-        msg.Append(refstring);
-    }
-
-    msg.AppendLiteral("\n    ");
-
-    nsTemplateMatch* match = nullptr;
-    if (mMatchMap.Get(aId, &match)){
-        while (match) {
-            if (match == aMatch)
-                break;
-            if (match->IsActive() &&
-                match->GetContainer() == aMatch->GetContainer()) {
-                activePriority = match->QuerySetPriority() + 1;
-                break;
-            }
-            match = match->mNext;
-        }
-    }
-
-    if (aMatch->IsActive()) {
-        if (aIsNew) {
-            msg.AppendLiteral("New active result for query ");
-            msg.AppendInt(priority);
-            msg.AppendLiteral(" matching rule ");
-            msg.AppendInt(aMatch->RuleIndex() + 1);
-        }
-        else {
-            msg.AppendLiteral("Removed active result for query ");
-            msg.AppendInt(priority);
-            if (activePriority > 0) {
-                msg.AppendLiteral(" (new active query is ");
-                msg.AppendInt(activePriority);
-                msg.Append(')');
-            }
-            else {
-                msg.AppendLiteral(" (no new active query)");
-            }
-        }
-    }
-    else {
-        if (aIsNew) {
-            msg.AppendLiteral("New inactive result for query ");
-            msg.AppendInt(priority);
-            if (activePriority > 0) {
-                msg.AppendLiteral(" (overridden by query ");
-                msg.AppendInt(activePriority);
-                msg.Append(')');
-            }
-            else {
-                msg.AppendLiteral(" (didn't match a rule)");
-            }
-        }
-        else {
-            msg.AppendLiteral("Removed inactive result for query ");
-            msg.AppendInt(priority);
-            if (activePriority > 0) {
-                msg.AppendLiteral(" (active query is ");
-                msg.AppendInt(activePriority);
-                msg.Append(')');
-            }
-            else {
-                msg.AppendLiteral(" (no active query)");
-            }
-        }
-    }
-
-    nsAutoString idstring;
-    nsXULContentUtils::GetTextForNode(aId, idstring);
-    msg.AppendLiteral(": ");
-    msg.Append(idstring);
-
-    nsCOMPtr<nsIConsoleService> cs = do_GetService(NS_CONSOLESERVICE_CONTRACTID);
-    if (cs)
-      cs->LogStringMessage(msg.get());
-}
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateBuilder.h
+++ /dev/null
@@ -1,561 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsXULTemplateBuilder_h__
-#define nsXULTemplateBuilder_h__
-
-#include "mozilla/dom/Element.h"
-#include "nsStubDocumentObserver.h"
-#include "nsIObserver.h"
-#include "nsIXULTemplateBuilder.h"
-#include "nsCOMArray.h"
-#include "nsTArray.h"
-#include "nsDataHashtable.h"
-#include "nsCycleCollectionParticipant.h"
-
-#include "mozilla/Logging.h"
-extern mozilla::LazyLogModule gXULTemplateLog;
-
-class nsIObserverService;
-class nsIRDFCompositeDataSource;
-class nsIRDFContainerUtils;
-class nsIRDFDataSource;
-class nsIRDFService;
-class nsIScriptSecurityManager;
-class nsIXULTemplateQueryProcessor;
-class nsTemplateCondition;
-class nsTemplateRule;
-class nsTemplateMatch;
-class nsTemplateQuerySet;
-
-namespace mozilla {
-namespace dom {
-
-class XULBuilderListener;
-
-} // namespace dom
-} // namespace mozilla
-
-
-/**
- * An object that translates an RDF graph into a presentation using a
- * set of rules.
- */
-class nsXULTemplateBuilder : public nsIXULTemplateBuilder,
-                             public nsIObserver,
-                             public nsStubDocumentObserver,
-                             public nsWrapperCache
-{
-    void CleanUp(bool aIsFinal);
-    void DestroyMatchMap();
-
-public:
-    nsresult Init();
-
-    nsresult InitGlobals();
-
-    /**
-     * Clear the template builder structures. The aIsFinal flag is set to true
-     * when the template is going away.
-     */
-    virtual void Uninit(bool aIsFinal);
-
-    // nsISupports interface
-    NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-    NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsXULTemplateBuilder,
-                                                           nsIXULTemplateBuilder)
-
-    virtual JSObject* WrapObject(JSContext* aCx,
-                                 JS::Handle<JSObject*> aGivenProto) override;
-    Element* GetParentObject()
-    {
-      return mRoot;
-    }
-
-    Element* GetRoot()
-    {
-        return mRoot;
-    }
-    nsISupports* GetDatasource();
-    void SetDatasource(nsISupports* aDatasource, mozilla::ErrorResult& aError);
-    nsIRDFCompositeDataSource* GetDatabase()
-    {
-        return mCompDB;
-    }
-    nsIXULTemplateResult* GetRootResult()
-    {
-        return mRootResult;
-    }
-    void Rebuild(mozilla::ErrorResult& aError);
-    void Refresh(mozilla::ErrorResult& aError);
-    void AddResult(nsIXULTemplateResult* aResult, nsINode& aQueryNode,
-                   mozilla::ErrorResult& aError);
-    void RemoveResult(nsIXULTemplateResult* aResult,
-                      mozilla::ErrorResult& aError);
-    void ReplaceResult(nsIXULTemplateResult* aOldResult,
-                       nsIXULTemplateResult* aNewResult,
-                       nsINode& aQueryNode,
-                       mozilla::ErrorResult& aError);
-    void ResultBindingChanged(nsIXULTemplateResult* aResult,
-                              mozilla::ErrorResult& aError);
-    nsIXULTemplateResult* GetResultForId(const nsAString& aId,
-                                         mozilla::ErrorResult& aError);
-    virtual nsIXULTemplateResult* GetResultForContent(Element& aElement)
-    {
-        return nullptr;
-    }
-    virtual bool HasGeneratedContent(nsIRDFResource* aResource,
-                                     const nsAString& aTag,
-                                     mozilla::ErrorResult& aError)
-    {
-        return false;
-    }
-    void AddRuleFilter(nsINode& aRule, nsIXULTemplateRuleFilter* aFilter,
-                       mozilla::ErrorResult& aError);
-    void AddListener(mozilla::dom::XULBuilderListener& aListener);
-    void RemoveListener(mozilla::dom::XULBuilderListener& aListener);
-
-    // nsIXULTemplateBuilder interface
-    NS_DECL_NSIXULTEMPLATEBUILDER
-
-    // nsIObserver Interface
-    NS_DECL_NSIOBSERVER
-
-    // nsIMutationObserver
-    NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED
-    NS_DECL_NSIMUTATIONOBSERVER_CONTENTREMOVED
-    NS_DECL_NSIMUTATIONOBSERVER_NODEWILLBEDESTROYED
-
-    /**
-     * Remove an old result and/or add a new result. This method will retrieve
-     * the set of containers where the result could be inserted and either add
-     * the new result to those containers, or remove the result from those
-     * containers. UpdateResultInContainer is called for each container.
-     *
-     * @param aOldResult result to remove
-     * @param aNewResult result to add
-     * @param aQueryNode query node for new result
-     */
-    nsresult
-    UpdateResult(nsIXULTemplateResult* aOldResult,
-                 nsIXULTemplateResult* aNewResult,
-                 nsINode* aQueryNode);
-
-    /**
-     * Remove an old result and/or add a new result from a specific container.
-     *
-     * @param aOldResult result to remove
-     * @param aNewResult result to add
-     * @param aQueryNode queryset for the new result
-     * @param aOldId id of old result
-     * @param aNewId id of new result
-     * @param aInsertionPoint container to remove or add result inside
-     */
-    nsresult
-    UpdateResultInContainer(nsIXULTemplateResult* aOldResult,
-                            nsIXULTemplateResult* aNewResult,
-                            nsTemplateQuerySet* aQuerySet,
-                            nsIRDFResource* aOldId,
-                            nsIRDFResource* aNewId,
-                            Element* aInsertionPoint);
-
-    nsresult
-    ComputeContainmentProperties();
-
-    static bool
-    IsTemplateElement(nsIContent* aContent);
-
-    virtual nsresult
-    RebuildAll() = 0; // must be implemented by subclasses
-
-    void RunnableRebuild() { Rebuild(); }
-    void RunnableLoadAndRebuild() {
-      Uninit(false);  // Reset results
-
-      nsCOMPtr<nsIDocument> doc = mRoot ? mRoot->GetComposedDoc() : nullptr;
-      if (doc) {
-        bool shouldDelay;
-        LoadDataSources(doc, &shouldDelay);
-        if (!shouldDelay) {
-          Rebuild();
-        }
-      }
-    }
-
-    // mRoot should not be cleared until after Uninit is finished so that
-    // generated content can be removed during uninitialization.
-    void UninitFalse() { Uninit(false); mRoot = nullptr; }
-    void UninitTrue() { Uninit(true); mRoot = nullptr; }
-
-    /**
-     * Find the <template> tag that applies for this builder
-     */
-    nsresult
-    GetTemplateRoot(Element** aResult);
-
-    /**
-     * Compile the template's queries
-     */
-    nsresult
-    CompileQueries();
-
-    /**
-     * Compile the template given a <template> in aTemplate. This function
-     * is called recursively to handle queries inside a queryset. For the
-     * outer pass, aIsQuerySet will be false, while the inner pass this will
-     * be true.
-     *
-     * aCanUseTemplate will be set to true if the template's queries could be
-     * compiled, and false otherwise. If false, the entire template is
-     * invalid.
-     *
-     * @param aTemplate <template> to compile
-     * @param aQuerySet first queryset
-     * @param aIsQuerySet true if
-     * @param aPriority the queryset index, incremented when a new one is added
-     * @param aCanUseTemplate true if template is valid
-     */
-    nsresult
-    CompileTemplate(Element* aTemplate,
-                    nsTemplateQuerySet* aQuerySet,
-                    bool aIsQuerySet,
-                    int32_t* aPriority,
-                    bool* aCanUseTemplate);
-
-    /**
-     * Compile a query using the extended syntax. For backwards compatible RDF
-     * syntax where there is no <query>, the <conditions> becomes the query.
-     *
-     * @param aRuleElement <rule> element
-     * @param aActionElement <action> element
-     * @param aMemberVariable member variable for the query
-     * @param aQuerySet the queryset
-     */
-    nsresult
-    CompileExtendedQuery(Element* aRuleElement,
-                         nsIContent* aActionElement,
-                         nsAtom* aMemberVariable,
-                         nsTemplateQuerySet* aQuerySet);
-
-    /**
-     * Determine the ref variable and tag from inside a RDF query.
-     */
-    void DetermineRDFQueryRef(nsIContent* aQueryElement, nsAtom** tag);
-
-    /**
-     * Determine the member variable from inside an action body. It will be
-     * the value of the uri attribute on a node.
-     */
-    already_AddRefed<nsAtom> DetermineMemberVariable(nsIContent* aElement);
-
-    /**
-     * Compile a simple query. A simple query is one that doesn't have a
-     * <query> and should use a default query which would normally just return
-     * a list of children of the reference point.
-     *
-     * @param aRuleElement the <rule>
-     * @param aQuerySet the query set
-     * @param aCanUseTemplate true if the query is valid
-     */
-    nsresult
-    CompileSimpleQuery(Element* aRuleElement,
-                       nsTemplateQuerySet* aQuerySet,
-                       bool* aCanUseTemplate);
-
-    /**
-     * Compile the <conditions> tag in a rule
-     *
-     * @param aRule template rule
-     * @param aConditions <conditions> element
-     */
-    nsresult
-    CompileConditions(nsTemplateRule* aRule, Element* aConditions);
-
-    /**
-     * Compile a <where> tag in a condition. The caller should set
-     * *aCurrentCondition to null for the first condition. This value will be
-     * updated to point to the new condition before returning. The conditions
-     * will be added to the rule aRule by this method.
-     *
-     * @param aRule template rule
-     * @param aCondition <where> element
-     * @param aCurrentCondition compiled condition
-     */
-    nsresult
-    CompileWhereCondition(nsTemplateRule* aRule,
-                          Element* aCondition,
-                          nsTemplateCondition** aCurrentCondition);
-
-    /**
-     * Compile the <bindings> for an extended template syntax rule.
-     */
-    nsresult
-    CompileBindings(nsTemplateRule* aRule, nsIContent* aBindings);
-
-    /**
-     * Compile a single binding for an extended template syntax rule.
-     */
-    nsresult
-    CompileBinding(nsTemplateRule* aRule, Element* aBinding);
-
-    /**
-     * Add automatic bindings for simple rules
-     */
-    nsresult
-    AddSimpleRuleBindings(nsTemplateRule* aRule, Element* aElement);
-
-    static void
-    AddBindingsFor(nsXULTemplateBuilder* aSelf,
-                   const nsAString& aVariable,
-                   void* aClosure);
-
-    /**
-     * Load the datasources for the template. shouldDelayBuilding is an out
-     * parameter which will be set to true to indicate that content building
-     * should not be performed yet as the datasource has not yet loaded. If
-     * false, the datasource has already loaded so building can proceed
-     * immediately. In the former case, the datasource or query processor
-     * should either rebuild the template or update results when the
-     * datasource is loaded as needed.
-     */
-    nsresult
-    LoadDataSources(nsIDocument* aDoc, bool* shouldDelayBuilding);
-
-    /**
-     * Called by LoadDataSources to load a datasource given a uri list
-     * in aDataSource. The list is a set of uris separated by spaces.
-     * If aIsRDFQuery is true, then this is for an RDF datasource which
-     * causes the method to check for additional flags specific to the
-     * RDF processor.
-     */
-    nsresult
-    LoadDataSourceUrls(nsIDocument* aDocument,
-                       const nsAString& aDataSources,
-                       bool aIsRDFQuery,
-                       bool* aShouldDelayBuilding);
-
-    nsresult
-    InitHTMLTemplateRoot();
-
-    /**
-     * Determine which rule matches a given result. aContainer is used for
-     * tag matching and is optional for non-content generating builders.
-     * The returned matched rule is always one of the rules owned by the
-     * query set aQuerySet.
-     *
-     * @param aContainer parent where generated content will be inserted
-     * @param aResult result to match
-     * @param aQuerySet query set to examine the rules of
-     * @param aMatchedRule [out] rule that has matched, or null if any.
-     * @param aRuleIndex [out] index of the rule
-     */
-    nsresult
-    DetermineMatchedRule(nsIContent* aContainer,
-                         nsIXULTemplateResult* aResult,
-                         nsTemplateQuerySet* aQuerySet,
-                         nsTemplateRule** aMatchedRule,
-                         int16_t *aRuleIndex);
-
-    // XXX sigh, the string template foo doesn't mix with
-    // operator->*() on egcs-1.1.2, so we'll need to explicitly pass
-    // "this" and use good ol' fashioned static callbacks.
-    void
-    ParseAttribute(const nsAString& aAttributeValue,
-                   void (*aVariableCallback)(nsXULTemplateBuilder* aThis, const nsAString&, void*),
-                   void (*aTextCallback)(nsXULTemplateBuilder* aThis, const nsAString&, void*),
-                   void* aClosure);
-
-    nsresult
-    SubstituteText(nsIXULTemplateResult* aMatch,
-                   const nsAString& aAttributeValue,
-                   nsAString& aResult);
-
-    static void
-    SubstituteTextAppendText(nsXULTemplateBuilder* aThis, const nsAString& aText, void* aClosure);
-
-    static void
-    SubstituteTextReplaceVariable(nsXULTemplateBuilder* aThis, const nsAString& aVariable, void* aClosure);
-
-    /**
-     * Convenience method which gets a resource for a result. If a result
-     * doesn't have a resource set, it will create one from the result's id.
-     */
-    nsresult GetResultResource(nsIXULTemplateResult* aResult,
-                               nsIRDFResource** aResource);
-
-protected:
-    explicit nsXULTemplateBuilder(Element* aElement);
-    virtual ~nsXULTemplateBuilder();
-
-    nsCOMPtr<nsISupports> mDataSource;
-    nsCOMPtr<nsIRDFDataSource> mDB;
-    nsCOMPtr<nsIRDFCompositeDataSource> mCompDB;
-
-    /**
-     * Circular reference, broken when the document is destroyed.
-     */
-    nsCOMPtr<Element> mRoot;
-
-    /**
-     * The root result, translated from the root element's ref
-     */
-    nsCOMPtr<nsIXULTemplateResult> mRootResult;
-
-    nsTArray<nsCOMPtr<nsIXULBuilderListener>> mListeners;
-
-    /**
-     * The query processor which generates results
-     */
-    nsCOMPtr<nsIXULTemplateQueryProcessor> mQueryProcessor;
-
-    /**
-     * The list of querysets
-     */
-    nsTArray<nsTemplateQuerySet *> mQuerySets;
-
-    /**
-     * Set to true if the rules have already been compiled
-     */
-    bool          mQueriesCompiled;
-
-    /**
-     * The default reference and member variables.
-     */
-    RefPtr<nsAtom> mRefVariable;
-    RefPtr<nsAtom> mMemberVariable;
-
-    /**
-     * The match map contains nsTemplateMatch objects, one for each unique
-     * match found, keyed by the resource for that match. A particular match
-     * will contain a linked list of all of the matches for that unique result
-     * id. Only one is active at a time. When a match is retracted, look in
-     * the match map, remove it, and apply the next valid match in sequence to
-     * make active.
-     */
-    nsDataHashtable<nsISupportsHashKey, nsTemplateMatch*> mMatchMap;
-
-    // pseudo-constants
-    static nsrefcnt gRefCnt;
-    static nsIRDFService*            gRDFService;
-    static nsIRDFContainerUtils*     gRDFContainerUtils;
-    static nsIScriptSecurityManager* gScriptSecurityManager;
-    static nsIPrincipal*             gSystemPrincipal;
-    static nsIObserverService*       gObserverService;
-
-    enum {
-        eDontTestEmpty = (1 << 0),
-        eDontRecurse = (1 << 1),
-        eLoggingEnabled = (1 << 2)
-    };
-
-    int32_t mFlags;
-
-    /**
-     * Stack-based helper class to maintain a list of ``activated''
-     * resources; i.e., resources for which we are currently building
-     * content.
-     */
-    class ActivationEntry {
-    public:
-        nsIRDFResource   *mResource;
-        ActivationEntry  *mPrevious;
-        ActivationEntry **mLink;
-
-        ActivationEntry(nsIRDFResource *aResource, ActivationEntry **aLink)
-            : mResource(aResource),
-              mPrevious(*aLink),
-              mLink(aLink) { *mLink = this; }
-
-        ~ActivationEntry() { *mLink = mPrevious; }
-    };
-
-    /**
-     * The top of the stack of resources that we're currently building
-     * content for.
-     */
-    ActivationEntry *mTop;
-
-    /**
-     * Determine if a resource is currently on the activation stack.
-     */
-    bool
-    IsActivated(nsIRDFResource *aResource);
-
-    /**
-     * Returns true if content may be generated for a result, or false if it
-     * cannot, for example, if it would be created inside a closed container.
-     * Those results will be generated when the container is opened.
-     * If false is returned, no content should be generated. Possible
-     * insertion locations may optionally be set for new content, depending on
-     * the builder being used. Note that *aLocations or some items within
-     * aLocations may be null.
-     */
-    virtual bool
-    GetInsertionLocations(nsIXULTemplateResult* aResult,
-                          nsCOMArray<Element>** aLocations) = 0;
-
-    /**
-     * Must be implemented by subclasses. Handle removing the generated
-     * output for aOldMatch and adding new output for aNewMatch. Either
-     * aOldMatch or aNewMatch may be null. aContext is the location returned
-     * from the call to MayGenerateResult.
-     */
-    virtual nsresult
-    ReplaceMatch(nsIXULTemplateResult* aOldResult,
-                 nsTemplateMatch* aNewMatch,
-                 nsTemplateRule* aNewMatchRule,
-                 Element* aContext) = 0;
-
-    /**
-     * Must be implemented by subclasses. Handle change in bound
-     * variable values for aResult. aModifiedVars contains the set
-     * of variables that have changed.
-     * @param aResult the ersult for which variable bindings has changed.
-     * @param aModifiedVars the set of variables for which the bindings
-     * have changed.
-     */
-    virtual nsresult
-    SynchronizeResult(nsIXULTemplateResult* aResult) = 0;
-
-    /**
-     * Output a new match or removed match to the console.
-     *
-     * @param aId id of the result
-     * @param aMatch new or removed match
-     * @param aIsNew true for new matched, false for removed matches
-     */
-    void
-    OutputMatchToLog(nsIRDFResource* aId,
-                     nsTemplateMatch* aMatch,
-                     bool aIsNew);
-
-    virtual void Traverse(nsCycleCollectionTraversalCallback &cb) const
-    {
-    }
-
-    /**
-     * Start observing events from the observer service and the given
-     * document.
-     *
-     * @param aDocument the document to observe
-     */
-    void StartObserving(nsIDocument* aDocument);
-
-    /**
-     * Stop observing events from the observer service and any associated
-     * document.
-     */
-    void StopObserving();
-
-    /**
-     * Document that we're observing. Weak ref!
-     */
-    nsIDocument* mObservedDocument;
-};
-
-nsresult NS_NewXULContentBuilder(Element* aElement,
-                                 nsIXULTemplateBuilder** aBuilder);
-
-#endif // nsXULTemplateBuilder_h__
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateQueryProcessorRDF.cpp
+++ /dev/null
@@ -1,1820 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsCOMPtr.h"
-#include "nsICollation.h"
-#include "nsIDOMNode.h"
-#include "nsIRDFNode.h"
-#include "nsIRDFObserver.h"
-#include "nsIRDFRemoteDataSource.h"
-#include "nsIRDFInferDataSource.h"
-#include "nsIRDFService.h"
-#include "nsRDFCID.h"
-#include "nsIServiceManager.h"
-#include "nsNameSpaceManager.h"
-#include "nsGkAtoms.h"
-#include "nsIDOMDocument.h"
-#include "nsAttrName.h"
-#include "rdf.h"
-#include "nsArrayUtils.h"
-#include "nsIURI.h"
-
-#include "nsContentTestNode.h"
-#include "nsRDFConInstanceTestNode.h"
-#include "nsRDFConMemberTestNode.h"
-#include "nsRDFPropertyTestNode.h"
-#include "nsInstantiationNode.h"
-#include "nsRDFTestNode.h"
-#include "nsXULContentUtils.h"
-#include "nsXULTemplateBuilder.h"
-#include "nsXULTemplateResultRDF.h"
-#include "nsXULTemplateResultSetRDF.h"
-#include "nsXULTemplateQueryProcessorRDF.h"
-#include "nsXULSortService.h"
-#include "nsIDocument.h"
-#include "nsIRDFCompositeDataSource.h"
-
-//----------------------------------------------------------------------
-
-#define PARSE_TYPE_INTEGER  "Integer"
-
-nsrefcnt                  nsXULTemplateQueryProcessorRDF::gRefCnt = 0;
-nsIRDFService*            nsXULTemplateQueryProcessorRDF::gRDFService;
-nsIRDFContainerUtils*     nsXULTemplateQueryProcessorRDF::gRDFContainerUtils;
-nsIRDFResource*           nsXULTemplateQueryProcessorRDF::kNC_BookmarkSeparator;
-nsIRDFResource*           nsXULTemplateQueryProcessorRDF::kRDF_type;
-
-NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULTemplateQueryProcessorRDF)
-
-NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsXULTemplateQueryProcessorRDF)
-    tmp->Done();
-NS_IMPL_CYCLE_COLLECTION_UNLINK_END
-
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsXULTemplateQueryProcessorRDF)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDB)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mLastRef)
-
-    for (auto it = tmp->mBindingDependencies.Iter(); !it.Done(); it.Next()) {
-        nsXULTemplateQueryProcessorRDF::ResultArray* array = it.UserData();
-        int32_t count = array->Length();
-        for (int32_t i = 0; i < count; ++i) {
-            cb.NoteXPCOMChild(array->ElementAt(i));
-        }
-    }
-
-    for (auto it = tmp->mMemoryElementToResultMap.Iter();
-         !it.Done();
-         it.Next()) {
-        nsCOMArray<nsXULTemplateResultRDF>* array = it.UserData();
-        int32_t count = array->Count();
-        for (int32_t i = 0; i < count; ++i) {
-            cb.NoteXPCOMChild(array->ObjectAt(i));
-        }
-    }
-
-    for (auto it = tmp->mRuleToBindingsMap.Iter(); !it.Done(); it.Next()) {
-        cb.NoteXPCOMChild(it.Key());
-    }
-
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mQueries)
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(nsXULTemplateQueryProcessorRDF)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(nsXULTemplateQueryProcessorRDF)
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXULTemplateQueryProcessorRDF)
-    NS_INTERFACE_MAP_ENTRY(nsIXULTemplateQueryProcessor)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFObserver)
-    NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIXULTemplateQueryProcessor)
-NS_INTERFACE_MAP_END
-
-nsXULTemplateQueryProcessorRDF::nsXULTemplateQueryProcessorRDF(void)
-    : mDB(nullptr),
-      mBuilder(nullptr),
-      mQueryProcessorRDFInited(false),
-      mGenerationStarted(false),
-      mUpdateBatchNest(0),
-      mSimpleRuleMemberTest(nullptr)
-{
-    gRefCnt++;
-}
-
-nsXULTemplateQueryProcessorRDF::~nsXULTemplateQueryProcessorRDF(void)
-{
-    if (--gRefCnt == 0) {
-        NS_IF_RELEASE(gRDFService);
-        NS_IF_RELEASE(gRDFContainerUtils);
-        NS_IF_RELEASE(kNC_BookmarkSeparator);
-        NS_IF_RELEASE(kRDF_type);
-    }
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::InitGlobals()
-{
-    nsresult rv;
-
-    // Initialize the global shared reference to the service
-    // manager and get some shared resource objects.
-    if (!gRDFService) {
-        NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
-        rv = CallGetService(kRDFServiceCID, &gRDFService);
-        if (NS_FAILED(rv))
-            return rv;
-    }
-
-    if (!gRDFContainerUtils) {
-        NS_DEFINE_CID(kRDFContainerUtilsCID, NS_RDFCONTAINERUTILS_CID);
-        rv = CallGetService(kRDFContainerUtilsCID, &gRDFContainerUtils);
-        if (NS_FAILED(rv))
-            return rv;
-    }
-
-    if (!kNC_BookmarkSeparator) {
-        gRDFService->GetResource(
-          NS_LITERAL_CSTRING(NC_NAMESPACE_URI "BookmarkSeparator"),
-                             &kNC_BookmarkSeparator);
-    }
-
-    if (!kRDF_type) {
-        gRDFService->GetResource(
-          NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "type"),
-                             &kRDF_type);
-    }
-
-    return NS_OK;
-}
-
-//----------------------------------------------------------------------
-//
-// nsIXULTemplateQueryProcessor interface
-//
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::GetDatasource(nsIArray* aDataSources,
-                                              nsIDOMNode* aRootNode,
-                                              bool aIsTrusted,
-                                              nsIXULTemplateBuilder* aBuilder,
-                                              bool* aShouldDelayBuilding,
-                                              nsISupports** aResult)
-{
-    nsCOMPtr<nsIRDFCompositeDataSource> compDB;
-    nsCOMPtr<Element> root = do_QueryInterface(aRootNode);
-    nsresult rv;
-
-    *aResult = nullptr;
-    *aShouldDelayBuilding = false;
-
-    NS_ENSURE_TRUE(root, NS_ERROR_UNEXPECTED);
-
-    // make sure the RDF service is set up
-    rv = InitGlobals();
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    // create a database for the builder
-    compDB = do_CreateInstance(NS_RDF_DATASOURCE_CONTRACTID_PREFIX
-                               "composite-datasource");
-    if (!compDB) {
-        NS_ERROR("unable to construct new composite data source");
-        return NS_ERROR_UNEXPECTED;
-    }
-
-    // check for magical attributes. XXX move to ``flags''?
-    if (root->AttrValueIs(kNameSpaceID_None,
-                          nsGkAtoms::coalesceduplicatearcs,
-                          nsGkAtoms::_false, eCaseMatters))
-        compDB->SetCoalesceDuplicateArcs(false);
-
-    if (root->AttrValueIs(kNameSpaceID_None,
-                          nsGkAtoms::allownegativeassertions,
-                          nsGkAtoms::_false, eCaseMatters))
-        compDB->SetAllowNegativeAssertions(false);
-
-    if (aIsTrusted) {
-        // If we're a privileged (e.g., chrome) document, then add the
-        // local store as the first data source in the db. Note that
-        // we _might_ not be able to get a local store if we haven't
-        // got a profile to read from yet.
-        nsCOMPtr<nsIRDFDataSource> localstore;
-        rv = gRDFService->GetDataSource("rdf:local-store",
-                                        getter_AddRefs(localstore));
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        rv = compDB->AddDataSource(localstore);
-        NS_ASSERTION(NS_SUCCEEDED(rv), "unable to add local store to db");
-        NS_ENSURE_SUCCESS(rv, rv);
-    }
-
-    uint32_t length, index;
-    rv = aDataSources->GetLength(&length);
-    NS_ENSURE_SUCCESS(rv,rv);
-
-    for (index = 0; index < length; index++) {
-
-        nsCOMPtr<nsIURI> uri = do_QueryElementAt(aDataSources, index);
-        if (!uri) // we ignore other datasources than uri
-            continue;
-
-        nsCOMPtr<nsIRDFDataSource> ds;
-        nsAutoCString uristrC;
-        uri->GetSpec(uristrC);
-
-        rv = gRDFService->GetDataSource(uristrC.get(), getter_AddRefs(ds));
-
-        if (NS_FAILED(rv)) {
-            // This is only a warning because the data source may not
-            // be accessible for any number of reasons, including
-            // security, a bad URL, etc.
-  #ifdef DEBUG
-            nsAutoCString msg;
-            msg.AppendLiteral("unable to load datasource '");
-            msg.Append(uristrC);
-            msg.Append('\'');
-            NS_WARNING(msg.get());
-  #endif
-            continue;
-        }
-
-        compDB->AddDataSource(ds);
-    }
-
-
-    // check if we were given an inference engine type
-    nsAutoString infer;
-    nsCOMPtr<nsIRDFDataSource> db;
-    root->GetAttr(kNameSpaceID_None, nsGkAtoms::infer, infer);
-    if (!infer.IsEmpty()) {
-        nsCString inferCID(NS_RDF_INFER_DATASOURCE_CONTRACTID_PREFIX);
-        AppendUTF16toUTF8(infer, inferCID);
-        nsCOMPtr<nsIRDFInferDataSource> inferDB =
-            do_CreateInstance(inferCID.get());
-
-        if (inferDB) {
-            inferDB->SetBaseDataSource(compDB);
-            db = do_QueryInterface(inferDB);
-        }
-        else {
-            NS_WARNING("failed to construct inference engine specified on template");
-        }
-    }
-
-    if (!db)
-        db = compDB;
-
-    return CallQueryInterface(db, aResult);
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::InitializeForBuilding(nsISupports* aDatasource,
-                                                      nsIXULTemplateBuilder* aBuilder,
-                                                      nsIDOMNode* aRootNode)
-{
-    if (!mQueryProcessorRDFInited) {
-        nsresult rv = InitGlobals();
-        if (NS_FAILED(rv))
-            return rv;
-
-        mQueryProcessorRDFInited = true;
-    }
-
-    // don't do anything if generation has already been done
-    if (mGenerationStarted)
-        return NS_ERROR_UNEXPECTED;
-
-    mDB = do_QueryInterface(aDatasource);
-    mBuilder = aBuilder;
-
-    ComputeContainmentProperties(aRootNode);
-
-    // Add ourselves as a datasource observer
-    if (mDB)
-        mDB->AddObserver(this);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::Done()
-{
-    if (!mQueryProcessorRDFInited)
-        return NS_OK;
-
-    if (mDB)
-        mDB->RemoveObserver(this);
-
-    mDB = nullptr;
-    mBuilder = nullptr;
-    mRefVariable = nullptr;
-    mLastRef = nullptr;
-
-    mGenerationStarted = false;
-    mUpdateBatchNest = 0;
-
-    mContainmentProperties.Clear();
-
-    for (ReteNodeSet::Iterator node = mAllTests.First();
-         node != mAllTests.Last(); ++node)
-        delete *node;
-
-    mAllTests.Clear();
-    mRDFTests.Clear();
-    mQueries.Clear();
-
-    mSimpleRuleMemberTest = nullptr;
-
-    mBindingDependencies.Clear();
-
-    mMemoryElementToResultMap.Clear();
-
-    mRuleToBindingsMap.Clear();
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::CompileQuery(nsIXULTemplateBuilder* aBuilder,
-                                             nsIDOMNode* aQueryNode,
-                                             nsAtom* aRefVariable,
-                                             nsAtom* aMemberVariable,
-                                             nsISupports** _retval)
-{
-    RefPtr<nsRDFQuery> query = new nsRDFQuery(this);
-    if (!query)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    query->mRefVariable = aRefVariable;
-    if (!mRefVariable)
-      mRefVariable = aRefVariable;
-
-    if (!aMemberVariable)
-        query->mMemberVariable = NS_Atomize("?");
-    else
-        query->mMemberVariable = aMemberVariable;
-
-    nsresult rv;
-    TestNode *lastnode = nullptr;
-
-    nsCOMPtr<nsIContent> content = do_QueryInterface(aQueryNode);
-
-    if (content->NodeInfo()->Equals(nsGkAtoms::_template, kNameSpaceID_XUL)) {
-        // simplified syntax with no rules
-
-        query->SetSimple();
-        NS_ASSERTION(!mSimpleRuleMemberTest,
-                     "CompileQuery called twice with the same template");
-        if (!mSimpleRuleMemberTest)
-            rv = CompileSimpleQuery(query, content->AsElement(), &lastnode);
-        else
-            rv = NS_ERROR_FAILURE;
-    }
-    else if (content->NodeInfo()->Equals(nsGkAtoms::rule, kNameSpaceID_XUL)) {
-        // simplified syntax with at least one rule
-        query->SetSimple();
-        rv = CompileSimpleQuery(query, content->AsElement(), &lastnode);
-    }
-    else {
-        rv = CompileExtendedQuery(query, content, &lastnode);
-    }
-
-    if (NS_FAILED(rv))
-        return rv;
-
-    query->SetQueryNode(aQueryNode);
-
-    nsInstantiationNode* instnode = new nsInstantiationNode(this, query);
-
-    // this and other functions always add nodes to mAllTests first. That
-    // way if something fails, the node will just sit harmlessly in mAllTests
-    // where it can be deleted later.
-    rv = mAllTests.Add(instnode);
-    if (NS_FAILED(rv)) {
-        delete instnode;
-        return rv;
-    }
-
-    rv = lastnode->AddChild(instnode);
-    if (NS_FAILED(rv))
-        return rv;
-
-    mQueries.AppendElement(query);
-
-    query.forget(_retval);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::GenerateResults(nsISupports* aDatasource,
-                                                nsIXULTemplateResult* aRef,
-                                                nsISupports* aQuery,
-                                                nsISimpleEnumerator** aResults)
-{
-    nsCOMPtr<nsITemplateRDFQuery> rdfquery = do_QueryInterface(aQuery);
-    if (! rdfquery)
-        return NS_ERROR_INVALID_ARG;
-
-    mGenerationStarted = true;
-
-    // should be safe to cast here since the query is a
-    // non-scriptable nsITemplateRDFQuery
-    nsRDFQuery* query = static_cast<nsRDFQuery *>(aQuery);
-
-    *aResults = nullptr;
-
-    nsCOMPtr<nsISimpleEnumerator> results;
-
-    if (aRef) {
-        // make sure that cached results were generated for this ref, and if not,
-        // regenerate them. Otherwise, things will go wrong for templates bound to
-        // an HTML element as they are not generated lazily.
-        if (aRef == mLastRef) {
-            query->UseCachedResults(getter_AddRefs(results));
-        }
-        else {
-            // clear the cached results
-            int32_t count = mQueries.Length();
-            for (int32_t r = 0; r < count; r++) {
-                mQueries[r]->ClearCachedResults();
-            }
-        }
-
-        if (! results) {
-            if (! query->mRefVariable)
-                query->mRefVariable = NS_Atomize("?uri");
-
-            nsCOMPtr<nsIRDFResource> refResource;
-            aRef->GetResource(getter_AddRefs(refResource));
-            if (! refResource)
-                return NS_ERROR_FAILURE;
-
-            // Propagate the assignments through the network
-            TestNode* root = query->GetRoot();
-
-            if (query->IsSimple() && mSimpleRuleMemberTest) {
-                // get the top node in the simple rule tree
-                root = mSimpleRuleMemberTest->GetParent();
-                mLastRef = aRef;
-            }
-
-            if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-                nsAutoString id;
-                aRef->GetId(id);
-
-                nsAutoString rvar;
-                query->mRefVariable->ToString(rvar);
-                nsAutoString mvar;
-                query->mMemberVariable->ToString(mvar);
-
-                MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-                       ("QueryProcessor::GenerateResults using ref %s and vars [ ref: %s  member: %s]",
-                       NS_ConvertUTF16toUTF8(id).get(),
-                       NS_ConvertUTF16toUTF8(rvar).get(),
-                       NS_ConvertUTF16toUTF8(mvar).get()));
-            }
-
-            if (root) {
-                // the seed is the initial instantiation, which has a single
-                // assignment holding the reference point
-                Instantiation seed;
-                seed.AddAssignment(query->mRefVariable, refResource);
-
-                InstantiationSet* instantiations = new InstantiationSet();
-                instantiations->Append(seed);
-
-                // if the propagation caused a match, then the results will be
-                // cached in the query, retrieved below by calling
-                // UseCachedResults. The matching result set owns the
-                // instantiations and will delete them when results have been
-                // iterated over. If the propagation did not match, the
-                // instantiations need to be deleted.
-                bool owned = false;
-                nsresult rv = root->Propagate(*instantiations, false, owned);
-                if (! owned)
-                    delete instantiations;
-                if (NS_FAILED(rv))
-                    return rv;
-
-                query->UseCachedResults(getter_AddRefs(results));
-            }
-        }
-    }
-
-    if (! results) {
-        // no results were found so create an empty set
-        results = new nsXULTemplateResultSetRDF(this, query, nullptr);
-    }
-
-    results.swap(*aResults);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::AddBinding(nsIDOMNode* aRuleNode,
-                                           nsAtom* aVar,
-                                           nsAtom* aRef,
-                                           const nsAString& aExpr)
-{
-    // add a <binding> to a rule. When a result is matched, the bindings are
-    // examined to add additional variable assignments
-
-    // bindings can't be added once result generation has started, otherwise
-    // the array sizes will get out of sync
-    if (mGenerationStarted)
-        return NS_ERROR_UNEXPECTED;
-
-    nsCOMPtr<nsIRDFResource> property;
-    nsresult rv = gRDFService->GetUnicodeResource(aExpr, getter_AddRefs(property));
-    if (NS_FAILED(rv))
-        return rv;
-
-    RefPtr<RDFBindingSet> bindings = mRuleToBindingsMap.GetWeak(aRuleNode);
-    if (!bindings) {
-        bindings = new RDFBindingSet();
-        mRuleToBindingsMap.Put(aRuleNode, bindings);
-    }
-
-    return bindings->AddBinding(aVar, aRef, property);
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::TranslateRef(nsISupports* aDatasource,
-                                                           const nsAString& aRefString,
-                                                           nsIXULTemplateResult** aRef)
-{
-    // make sure the RDF service is set up
-    nsresult rv = InitGlobals();
-    if (NS_FAILED(rv))
-        return rv;
-
-    nsCOMPtr<nsIRDFResource> uri;
-    gRDFService->GetUnicodeResource(aRefString, getter_AddRefs(uri));
-
-    RefPtr<nsXULTemplateResultRDF> refresult = new nsXULTemplateResultRDF(uri);
-    if (! refresult)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    refresult.forget(aRef);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::CompareResults(nsIXULTemplateResult* aLeft,
-                                               nsIXULTemplateResult* aRight,
-                                               nsAtom* aVar,
-                                               uint32_t aSortHints,
-                                               int32_t* aResult)
-{
-    NS_ENSURE_ARG_POINTER(aLeft);
-    NS_ENSURE_ARG_POINTER(aRight);
-
-    *aResult = 0;
-
-    // for natural order sorting, use the index in the RDF container for the
-    // order. If there is no container, just sort them arbitrarily.
-    if (!aVar) {
-        // if a result has a negative index, just sort it first
-        int32_t leftindex = GetContainerIndexOf(aLeft);
-        int32_t rightindex = GetContainerIndexOf(aRight);
-        *aResult = leftindex == rightindex ? 0 :
-                   leftindex > rightindex ? 1 :
-                   -1;
-        return NS_OK;
-    }
-
-    nsDependentAtomString sortkey(aVar);
-
-    nsCOMPtr<nsISupports> leftNode, rightNode;
-
-    if (!sortkey.IsEmpty() && sortkey[0] != '?' &&
-        !StringBeginsWith(sortkey, NS_LITERAL_STRING("rdf:")) &&
-        mDB) {
-        // if the sort key is not a template variable, it should be an RDF
-        // predicate. Get the targets and compare those instead.
-        nsCOMPtr<nsIRDFResource> predicate;
-        nsresult rv = gRDFService->GetUnicodeResource(sortkey, getter_AddRefs(predicate));
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        // create a predicate with '?sort=true' appended. This special
-        // predicate may be used to have a different sort value than the
-        // displayed value
-        sortkey.AppendLiteral("?sort=true");
-
-        nsCOMPtr<nsIRDFResource> sortPredicate;
-        rv = gRDFService->GetUnicodeResource(sortkey, getter_AddRefs(sortPredicate));
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        rv = GetSortValue(aLeft, predicate, sortPredicate, getter_AddRefs(leftNode));
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        rv = GetSortValue(aRight, predicate, sortPredicate, getter_AddRefs(rightNode));
-        NS_ENSURE_SUCCESS(rv, rv);
-    }
-    else {
-        // get the values for the sort key from the results
-        aLeft->GetBindingObjectFor(aVar, getter_AddRefs(leftNode));
-        aRight->GetBindingObjectFor(aVar, getter_AddRefs(rightNode));
-    }
-
-    {
-        // Literals?
-        nsCOMPtr<nsIRDFLiteral> l = do_QueryInterface(leftNode);
-        if (l) {
-            nsCOMPtr<nsIRDFLiteral> r = do_QueryInterface(rightNode);
-            if (r) {
-                const char16_t *lstr, *rstr;
-                l->GetValueConst(&lstr);
-                r->GetValueConst(&rstr);
-
-                *aResult = XULSortServiceImpl::CompareValues(
-                               nsDependentString(lstr),
-                               nsDependentString(rstr), aSortHints);
-            }
-
-            return NS_OK;
-        }
-    }
-
-    {
-        // Dates?
-        nsCOMPtr<nsIRDFDate> l = do_QueryInterface(leftNode);
-        if (l) {
-            nsCOMPtr<nsIRDFDate> r = do_QueryInterface(rightNode);
-            if (r) {
-                PRTime ldate, rdate;
-                l->GetValue(&ldate);
-                r->GetValue(&rdate);
-
-                int64_t delta = ldate - rdate;
-                if (delta == 0)
-                    *aResult = 0;
-                else if (delta >= 0)
-                    *aResult = 1;
-                else
-                    *aResult = -1;
-            }
-
-            return NS_OK;
-        }
-    }
-
-    {
-        // Integers?
-        nsCOMPtr<nsIRDFInt> l = do_QueryInterface(leftNode);
-        if (l) {
-            nsCOMPtr<nsIRDFInt> r = do_QueryInterface(rightNode);
-            if (r) {
-                int32_t lval, rval;
-                l->GetValue(&lval);
-                r->GetValue(&rval);
-
-                *aResult = lval - rval;
-            }
-
-            return NS_OK;
-        }
-    }
-
-    nsICollation* collation = nsXULContentUtils::GetCollation();
-    if (collation) {
-        // Blobs? (We can only compare these reasonably if we have a
-        // collation object.)
-        nsCOMPtr<nsIRDFBlob> l = do_QueryInterface(leftNode);
-        if (l) {
-            nsCOMPtr<nsIRDFBlob> r = do_QueryInterface(rightNode);
-            if (r) {
-                const uint8_t *lval, *rval;
-                int32_t llen, rlen;
-                l->GetValue(&lval);
-                l->GetLength(&llen);
-                r->GetValue(&rval);
-                r->GetLength(&rlen);
-
-                collation->CompareRawSortKey(lval, llen, rval, rlen, aResult);
-            }
-        }
-    }
-
-    // if the results are none of the above, just pretend that they are equal
-    return NS_OK;
-}
-
-//----------------------------------------------------------------------
-//
-// nsIRDFObserver interface
-//
-
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::OnAssert(nsIRDFDataSource* aDataSource,
-                                         nsIRDFResource* aSource,
-                                         nsIRDFResource* aProperty,
-                                         nsIRDFNode* aTarget)
-{
-    // Ignore updates if we're batching
-    if (mUpdateBatchNest)
-        return(NS_OK);
-
-    if (! mBuilder)
-        return NS_OK;
-
-    LOG("onassert", aSource, aProperty, aTarget);
-
-    Propagate(aSource, aProperty, aTarget);
-    SynchronizeAll(aSource, aProperty, nullptr, aTarget);
-    return NS_OK;
-}
-
-
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::OnUnassert(nsIRDFDataSource* aDataSource,
-                                           nsIRDFResource* aSource,
-                                           nsIRDFResource* aProperty,
-                                           nsIRDFNode* aTarget)
-{
-    // Ignore updates if we're batching
-    if (mUpdateBatchNest)
-        return NS_OK;
-
-    if (! mBuilder)
-        return NS_OK;
-
-    LOG("onunassert", aSource, aProperty, aTarget);
-
-    Retract(aSource, aProperty, aTarget);
-    SynchronizeAll(aSource, aProperty, aTarget, nullptr);
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::OnChange(nsIRDFDataSource* aDataSource,
-                                         nsIRDFResource* aSource,
-                                         nsIRDFResource* aProperty,
-                                         nsIRDFNode* aOldTarget,
-                                         nsIRDFNode* aNewTarget)
-{
-    // Ignore updates if we're batching
-    if (mUpdateBatchNest)
-        return NS_OK;
-
-    if (! mBuilder)
-        return NS_OK;
-
-    LOG("onchange", aSource, aProperty, aNewTarget);
-
-    if (aOldTarget) {
-        // Pull any old results that were relying on aOldTarget
-        Retract(aSource, aProperty, aOldTarget);
-    }
-
-    if (aNewTarget) {
-        // Fire any new results that are activated by aNewTarget
-        Propagate(aSource, aProperty, aNewTarget);
-    }
-
-    // Synchronize any of the content model that may have changed.
-    SynchronizeAll(aSource, aProperty, aOldTarget, aNewTarget);
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::OnMove(nsIRDFDataSource* aDataSource,
-                                       nsIRDFResource* aOldSource,
-                                       nsIRDFResource* aNewSource,
-                                       nsIRDFResource* aProperty,
-                                       nsIRDFNode* aTarget)
-{
-    // Ignore updates if we're batching
-    if (mUpdateBatchNest)
-        return NS_OK;
-
-    MOZ_ASSERT_UNREACHABLE("write me");
-    return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::OnBeginUpdateBatch(nsIRDFDataSource* aDataSource)
-{
-    mUpdateBatchNest++;
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorRDF::OnEndUpdateBatch(nsIRDFDataSource* aDataSource)
-{
-    NS_ASSERTION(mUpdateBatchNest > 0, "badly nested update batch");
-    if (--mUpdateBatchNest <= 0) {
-        mUpdateBatchNest = 0;
-
-        if (mBuilder)
-            mBuilder->Rebuild();
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::Propagate(nsIRDFResource* aSource,
-                                          nsIRDFResource* aProperty,
-                                          nsIRDFNode* aTarget)
-{
-    // When a new assertion is added to the graph, determine any new matches
-    // that must be added to the template builder. First, iterate through all
-    // the RDF tests (<member> and <triple> tests), and find the topmost test
-    // that would be affected by the new assertion.
-    nsresult rv;
-
-    ReteNodeSet livenodes;
-
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        const char* sourceStr;
-        aSource->GetValueConst(&sourceStr);
-        const char* propertyStr;
-        aProperty->GetValueConst(&propertyStr);
-        nsAutoString targetStr;
-        nsXULContentUtils::GetTextForNode(aTarget, targetStr);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsXULTemplateQueryProcessorRDF::Propagate: [%s] -> [%s] -> [%s]\n",
-               sourceStr, propertyStr, NS_ConvertUTF16toUTF8(targetStr).get()));
-    }
-
-    {
-        ReteNodeSet::Iterator last = mRDFTests.Last();
-        for (ReteNodeSet::Iterator i = mRDFTests.First(); i != last; ++i) {
-            nsRDFTestNode* rdftestnode = static_cast<nsRDFTestNode*>(*i);
-
-            Instantiation seed;
-            if (rdftestnode->CanPropagate(aSource, aProperty, aTarget, seed)) {
-                rv = livenodes.Add(rdftestnode);
-                if (NS_FAILED(rv))
-                    return rv;
-            }
-        }
-    }
-
-    // Now, we'll go through each, and any that aren't dominated by
-    // another live node will be used to propagate the assertion
-    // through the rule network
-    {
-        ReteNodeSet::Iterator last = livenodes.Last();
-        for (ReteNodeSet::Iterator i = livenodes.First(); i != last; ++i) {
-            nsRDFTestNode* rdftestnode = static_cast<nsRDFTestNode*>(*i);
-
-            // What happens here is we create an instantiation as if we were
-            // at the found test in the rule network. For example, if the
-            // found test was a member test (parent => child), the parent
-            // and child variables are assigned the values provided by the new
-            // RDF assertion in the graph. The Constrain call is used to go
-            // up to earlier RDF tests, filling in variables as it goes.
-            // Constrain will eventually get up to the top node, an
-            // nsContentTestNode, which takes the value of the reference
-            // variable and calls the template builder to see if a result has
-            // been generated already for the reference value. If it hasn't,
-            // the new assertion couldn't cause a new match. If the result
-            // exists, call Propagate to continue to the later RDF tests to
-            // fill in the rest of the variable assignments.
-
-            // Bogus, to get the seed instantiation
-            Instantiation seed;
-            rdftestnode->CanPropagate(aSource, aProperty, aTarget, seed);
-
-            InstantiationSet* instantiations = new InstantiationSet();
-            instantiations->Append(seed);
-
-            rv = rdftestnode->Constrain(*instantiations);
-            if (NS_FAILED(rv)) {
-                delete instantiations;
-                return rv;
-            }
-
-            bool owned = false;
-            if (!instantiations->Empty())
-                rv = rdftestnode->Propagate(*instantiations, true, owned);
-
-            // owned should always be false in update mode, but check just
-            // to be sure
-            if (!owned)
-                delete instantiations;
-            if (NS_FAILED(rv))
-                return rv;
-        }
-    }
-
-    return NS_OK;
-}
-
-
-nsresult
-nsXULTemplateQueryProcessorRDF::Retract(nsIRDFResource* aSource,
-                                        nsIRDFResource* aProperty,
-                                        nsIRDFNode* aTarget)
-{
-
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        const char* sourceStr;
-        aSource->GetValueConst(&sourceStr);
-        const char* propertyStr;
-        aProperty->GetValueConst(&propertyStr);
-        nsAutoString targetStr;
-        nsXULContentUtils::GetTextForNode(aTarget, targetStr);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("nsXULTemplateQueryProcessorRDF::Retract: [%s] -> [%s] -> [%s]\n",
-               sourceStr, propertyStr, NS_ConvertUTF16toUTF8(targetStr).get()));
-    }
-
-    // Retract any currently active rules that will no longer be matched.
-    ReteNodeSet::ConstIterator lastnode = mRDFTests.Last();
-    for (ReteNodeSet::ConstIterator node = mRDFTests.First(); node != lastnode; ++node) {
-        const nsRDFTestNode* rdftestnode = static_cast<const nsRDFTestNode*>(*node);
-
-        rdftestnode->Retract(aSource, aProperty, aTarget);
-
-        // Now fire any newly revealed rules
-        // XXXwaterson yo. write me.
-        // The intent here is to handle any rules that might be
-        // "revealed" by the removal of an assertion from the datasource.
-        // Waterson doesn't think we support negated conditions in a rule.
-        // Nor is he sure that this is currently useful.
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::SynchronizeAll(nsIRDFResource* aSource,
-                                               nsIRDFResource* aProperty,
-                                               nsIRDFNode* aOldTarget,
-                                               nsIRDFNode* aNewTarget)
-{
-    // Update each match that contains <aSource, aProperty, aOldTarget>.
-
-    // Get all the matches whose assignments are currently supported
-    // by aSource and aProperty: we'll need to recompute them.
-    ResultArray* results;
-    if (!mBindingDependencies.Get(aSource, &results) || !mBuilder)
-        return NS_OK;
-
-    uint32_t length = results->Length();
-
-    for (uint32_t r = 0; r < length; r++) {
-        nsXULTemplateResultRDF* result = (*results)[r];
-        if (result) {
-            // synchronize the result's bindings and then update the builder
-            // so that content can be updated
-            if (result->SyncAssignments(aSource, aProperty, aNewTarget)) {
-                nsITemplateRDFQuery* query = result->Query();
-                if (query) {
-                    nsCOMPtr<nsIDOMNode> querynode;
-                    query->GetQueryNode(getter_AddRefs(querynode));
-
-                    mBuilder->ResultBindingChanged(result);
-                }
-            }
-        }
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::Log(const char* aOperation,
-                                    nsIRDFResource* aSource,
-                                    nsIRDFResource* aProperty,
-                                    nsIRDFNode* aTarget)
-{
-    if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Debug)) {
-        nsresult rv;
-
-        const char* sourceStr;
-        rv = aSource->GetValueConst(&sourceStr);
-        if (NS_FAILED(rv))
-            return rv;
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("xultemplate[%p] %8s [%s]--", this, aOperation, sourceStr));
-
-        const char* propertyStr;
-        rv = aProperty->GetValueConst(&propertyStr);
-        if (NS_FAILED(rv))
-            return rv;
-
-        nsAutoString targetStr;
-        rv = nsXULContentUtils::GetTextForNode(aTarget, targetStr);
-        if (NS_FAILED(rv))
-            return rv;
-
-        nsAutoCString targetstrC;
-        LossyCopyUTF16toASCII(targetStr, targetstrC);
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("                        --[%s]-->[%s]",
-                propertyStr,
-                targetstrC.get()));
-    }
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::CheckContainer(nsIRDFResource* aResource,
-                                               bool* aIsContainer)
-{
-    NS_ENSURE_ARG_POINTER(aIsContainer);
-    NS_ENSURE_STATE(mDB);
-
-    // We have to look at all of the arcs extending out of the
-    // resource: if any of them are that "containment" property, then
-    // we know we'll have children.
-    bool isContainer = false;
-
-    for (nsResourceSet::ConstIterator property = mContainmentProperties.First();
-         property != mContainmentProperties.Last();
-         property++) {
-        bool hasArc = false;
-        mDB->HasArcOut(aResource, *property, &hasArc);
-
-        if (hasArc) {
-            // Well, it's a container...
-            isContainer = true;
-            break;
-        }
-    }
-
-    // If we get here, and we're still not sure if it's a container,
-    // then see if it's an RDF container
-    if (! isContainer) {
-        gRDFContainerUtils->IsContainer(mDB, aResource, &isContainer);
-    }
-
-    *aIsContainer = isContainer;
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::CheckEmpty(nsIRDFResource* aResource,
-                                           bool* aIsEmpty)
-{
-    NS_ENSURE_STATE(mDB);
-    *aIsEmpty = true;
-
-    for (nsResourceSet::ConstIterator property = mContainmentProperties.First();
-         property != mContainmentProperties.Last();
-         property++) {
-
-        nsCOMPtr<nsIRDFNode> dummy;
-        mDB->GetTarget(aResource, *property, true, getter_AddRefs(dummy));
-
-        if (dummy) {
-            *aIsEmpty = false;
-            break;
-        }
-    }
-
-    if (*aIsEmpty){
-        return nsXULTemplateQueryProcessorRDF::gRDFContainerUtils->
-                   IsEmpty(mDB, aResource, aIsEmpty);
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::CheckIsSeparator(nsIRDFResource* aResource,
-                                                 bool* aIsSeparator)
-{
-    NS_ENSURE_STATE(mDB);
-    return mDB->HasAssertion(aResource, kRDF_type, kNC_BookmarkSeparator,
-                             true, aIsSeparator);
-}
-
-//----------------------------------------------------------------------
-
-nsresult
-nsXULTemplateQueryProcessorRDF::ComputeContainmentProperties(nsIDOMNode* aRootNode)
-{
-    // The 'containment' attribute on the root node is a
-    // whitespace-separated list that tells us which properties we
-    // should use to test for containment.
-    nsresult rv;
-
-    mContainmentProperties.Clear();
-
-    nsCOMPtr<nsIContent> content = do_QueryInterface(aRootNode);
-
-    nsAutoString containment;
-    if (content->IsElement()) {
-      content->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::containment, containment);
-    }
-
-    uint32_t len = containment.Length();
-    uint32_t offset = 0;
-    while (offset < len) {
-        while (offset < len && nsCRT::IsAsciiSpace(containment[offset]))
-            ++offset;
-
-        if (offset >= len)
-            break;
-
-        uint32_t end = offset;
-        while (end < len && !nsCRT::IsAsciiSpace(containment[end]))
-            ++end;
-
-        nsAutoString propertyStr;
-        containment.Mid(propertyStr, offset, end - offset);
-
-        nsCOMPtr<nsIRDFResource> property;
-        rv = gRDFService->GetUnicodeResource(propertyStr, getter_AddRefs(property));
-        if (NS_FAILED(rv))
-            return rv;
-
-        rv = mContainmentProperties.Add(property);
-        if (NS_FAILED(rv))
-            return rv;
-
-        offset = end;
-    }
-
-#define TREE_PROPERTY_HACK 1
-#if defined(TREE_PROPERTY_HACK)
-    if (! len) {
-        // Some ever-present membership tests.
-        mContainmentProperties.Add(nsXULContentUtils::NC_child);
-        mContainmentProperties.Add(nsXULContentUtils::NC_Folder);
-    }
-#endif
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::CompileExtendedQuery(nsRDFQuery* aQuery,
-                                                     nsIContent* aConditions,
-                                                     TestNode** aLastNode)
-{
-    // Compile an extended query's children
-    nsContentTestNode* idnode =
-        new nsContentTestNode(this, aQuery->mRefVariable);
-
-    aQuery->SetRoot(idnode);
-    nsresult rv = mAllTests.Add(idnode);
-    if (NS_FAILED(rv)) {
-        delete idnode;
-        return rv;
-    }
-
-    TestNode* prevnode = idnode;
-
-    for (nsIContent* condition = aConditions->GetFirstChild();
-         condition;
-         condition = condition->GetNextSibling()) {
-
-        // the <content> condition should always be the first child
-        if (condition->IsXULElement(nsGkAtoms::content)) {
-            if (condition != aConditions->GetFirstChild()) {
-                nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_CONTENT_NOT_FIRST);
-                continue;
-            }
-
-            // check for <content tag='tag'/> which indicates that matches
-            // should only be generated for items inside content with that tag
-            nsAutoString tagstr;
-            condition->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::tag, tagstr);
-
-            RefPtr<nsAtom> tag;
-            if (! tagstr.IsEmpty()) {
-                tag = NS_Atomize(tagstr);
-            }
-
-            nsCOMPtr<nsIDOMDocument> doc = do_QueryInterface(condition->GetComposedDoc());
-            if (! doc)
-                return NS_ERROR_FAILURE;
-
-            idnode->SetTag(tag, doc);
-            continue;
-        }
-
-        TestNode* testnode = nullptr;
-        nsresult rv = CompileQueryChild(condition->NodeInfo()->NameAtom(),
-                                        aQuery, condition, prevnode, &testnode);
-        if (NS_FAILED(rv))
-            return rv;
-
-        if (testnode) {
-            rv = prevnode->AddChild(testnode);
-            if (NS_FAILED(rv))
-                return rv;
-
-            prevnode = testnode;
-        }
-    }
-
-    *aLastNode = prevnode;
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::CompileQueryChild(nsAtom* aTag,
-                                                  nsRDFQuery* aQuery,
-                                                  nsIContent* aCondition,
-                                                  TestNode* aParentNode,
-                                                  TestNode** aResult)
-{
-    nsresult rv = NS_OK;
-
-    if (aCondition->IsElement() && aTag == nsGkAtoms::triple) {
-        rv = CompileTripleCondition(aQuery, aCondition->AsElement(), aParentNode, aResult);
-    } else if (aCondition->IsElement() && aTag == nsGkAtoms::member) {
-        rv = CompileMemberCondition(aQuery, aCondition->AsElement(), aParentNode, aResult);
-    }
-    else if (MOZ_LOG_TEST(gXULTemplateLog, LogLevel::Info)) {
-        nsAutoString tagstr;
-        aTag->ToString(tagstr);
-
-        nsAutoCString tagstrC;
-        LossyCopyUTF16toASCII(tagstr, tagstrC);
-        MOZ_LOG(gXULTemplateLog, LogLevel::Info,
-               ("xultemplate[%p] unrecognized condition test <%s>",
-                this, tagstrC.get()));
-    }
-
-    return rv;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::ParseLiteral(const nsString& aParseType,
-                                             const nsString& aValue,
-                                             nsIRDFNode** aResult)
-{
-    nsresult rv = NS_OK;
-    *aResult = nullptr;
-
-    if (aParseType.EqualsLiteral(PARSE_TYPE_INTEGER)) {
-        nsCOMPtr<nsIRDFInt> intLiteral;
-        nsresult errorCode;
-        int32_t intValue = aValue.ToInteger(&errorCode);
-        if (NS_FAILED(errorCode))
-            return NS_ERROR_FAILURE;
-        rv = gRDFService->GetIntLiteral(intValue, getter_AddRefs(intLiteral));
-        if (NS_FAILED(rv))
-            return rv;
-        intLiteral.forget(aResult);
-    }
-    else {
-        nsCOMPtr<nsIRDFLiteral> literal;
-        rv = gRDFService->GetLiteral(aValue.get(), getter_AddRefs(literal));
-        if (NS_FAILED(rv))
-            return rv;
-        literal.forget(aResult);
-    }
-    return rv;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::CompileTripleCondition(nsRDFQuery* aQuery,
-                                                       Element* aCondition,
-                                                       TestNode* aParentNode,
-                                                       TestNode** aResult)
-{
-    // Compile a <triple> condition, which must be of the form:
-    //
-    //   <triple subject="?var1|resource"
-    //           predicate="resource"
-    //           object="?var2|resource|literal" />
-    //
-    // XXXwaterson Some day it would be cool to allow the 'predicate'
-    // to be bound to a variable.
-
-    // subject
-    nsAutoString subject;
-    aCondition->GetAttr(kNameSpaceID_None, nsGkAtoms::subject, subject);
-
-    RefPtr<nsAtom> svar;
-    nsCOMPtr<nsIRDFResource> sres;
-    if (subject.IsEmpty()) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_TRIPLE_BAD_SUBJECT);
-        return NS_OK;
-    }
-    if (subject[0] == char16_t('?'))
-        svar = NS_Atomize(subject);
-    else
-        gRDFService->GetUnicodeResource(subject, getter_AddRefs(sres));
-
-    // predicate
-    nsAutoString predicate;
-    aCondition->GetAttr(kNameSpaceID_None, nsGkAtoms::predicate, predicate);
-
-    nsCOMPtr<nsIRDFResource> pres;
-    if (predicate.IsEmpty() || predicate[0] == char16_t('?')) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_TRIPLE_BAD_PREDICATE);
-        return NS_OK;
-    }
-    gRDFService->GetUnicodeResource(predicate, getter_AddRefs(pres));
-
-    // object
-    nsAutoString object;
-    aCondition->GetAttr(kNameSpaceID_None, nsGkAtoms::object, object);
-
-    RefPtr<nsAtom> ovar;
-    nsCOMPtr<nsIRDFNode> onode;
-    if (object.IsEmpty()) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_TRIPLE_BAD_OBJECT);
-        return NS_OK;
-    }
-
-    if (object[0] == char16_t('?')) {
-        ovar = NS_Atomize(object);
-    }
-    else if (object.FindChar(':') != -1) { // XXXwaterson evil.
-        // treat as resource
-        nsCOMPtr<nsIRDFResource> resource;
-        gRDFService->GetUnicodeResource(object, getter_AddRefs(resource));
-        onode = do_QueryInterface(resource);
-    }
-    else {
-        nsAutoString parseType;
-        aCondition->GetAttr(kNameSpaceID_None, nsGkAtoms::parsetype, parseType);
-        nsresult rv = ParseLiteral(parseType, object, getter_AddRefs(onode));
-        if (NS_FAILED(rv))
-            return rv;
-    }
-
-    nsRDFPropertyTestNode* testnode = nullptr;
-
-    if (svar && ovar) {
-        testnode = new nsRDFPropertyTestNode(aParentNode, this, svar, pres, ovar);
-    }
-    else if (svar) {
-        testnode = new nsRDFPropertyTestNode(aParentNode, this, svar, pres, onode);
-    }
-    else if (ovar) {
-        testnode = new nsRDFPropertyTestNode(aParentNode, this, sres, pres, ovar);
-    }
-    else {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_TRIPLE_NO_VAR);
-        return NS_OK;
-    }
-
-    // add testnode to mAllTests first. If adding to mRDFTests fails, just
-    // leave it in the list so that it can be deleted later.
-    MOZ_ASSERT(testnode);
-    nsresult rv = mAllTests.Add(testnode);
-    if (NS_FAILED(rv)) {
-        delete testnode;
-        return rv;
-    }
-
-    rv = mRDFTests.Add(testnode);
-    if (NS_FAILED(rv))
-        return rv;
-
-    *aResult = testnode;
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::CompileMemberCondition(nsRDFQuery* aQuery,
-                                                       Element* aCondition,
-                                                       TestNode* aParentNode,
-                                                       TestNode** aResult)
-{
-    // Compile a <member> condition, which must be of the form:
-    //
-    //   <member container="?var1" child="?var2" />
-    //
-
-    // container
-    nsAutoString container;
-    aCondition->GetAttr(kNameSpaceID_None, nsGkAtoms::container, container);
-
-    if (!container.IsEmpty() && container[0] != char16_t('?')) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_MEMBER_NOCONTAINERVAR);
-        return NS_OK;
-    }
-
-    RefPtr<nsAtom> containervar = NS_Atomize(container);
-
-    // child
-    nsAutoString child;
-    aCondition->GetAttr(kNameSpaceID_None, nsGkAtoms::child, child);
-
-    if (!child.IsEmpty() && child[0] != char16_t('?')) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_MEMBER_NOCHILDVAR);
-        return NS_OK;
-    }
-
-    RefPtr<nsAtom> childvar = NS_Atomize(child);
-
-    TestNode* testnode =
-        new nsRDFConMemberTestNode(aParentNode,
-                                   this,
-                                   containervar,
-                                   childvar);
-
-    // add testnode to mAllTests first. If adding to mRDFTests fails, just
-    // leave it in the list so that it can be deleted later.
-    nsresult rv = mAllTests.Add(testnode);
-    if (NS_FAILED(rv)) {
-        delete testnode;
-        return rv;
-    }
-
-    rv = mRDFTests.Add(testnode);
-    if (NS_FAILED(rv))
-        return rv;
-
-    *aResult = testnode;
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::AddDefaultSimpleRules(nsRDFQuery* aQuery,
-                                                      TestNode** aChildNode)
-{
-    // XXXndeakin should check for tag in query processor instead of builder?
-    nsContentTestNode* idnode =
-        new nsContentTestNode(this,
-                              aQuery->mRefVariable);
-
-    // Create (?container ^member ?member)
-    nsRDFConMemberTestNode* membernode =
-        new nsRDFConMemberTestNode(idnode,
-                                   this,
-                                   aQuery->mRefVariable,
-                                   aQuery->mMemberVariable);
-
-    // add nodes to mAllTests first. If later calls fail, just leave them in
-    // the list so that they can be deleted later.
-    nsresult rv = mAllTests.Add(idnode);
-    if (NS_FAILED(rv)) {
-        delete idnode;
-        delete membernode;
-        return rv;
-    }
-
-    rv = mAllTests.Add(membernode);
-    if (NS_FAILED(rv)) {
-        delete membernode;
-        return rv;
-    }
-
-    rv = mRDFTests.Add(membernode);
-    if (NS_FAILED(rv))
-        return rv;
-
-    rv = idnode->AddChild(membernode);
-    if (NS_FAILED(rv))
-        return rv;
-
-    mSimpleRuleMemberTest = membernode;
-    *aChildNode = membernode;
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::CompileSimpleQuery(nsRDFQuery* aQuery,
-                                                   Element* aQueryElement,
-                                                   TestNode** aLastNode)
-{
-    // Compile a "simple" (or old-school style) <template> query.
-    nsresult rv;
-
-    TestNode* parentNode;
-
-    if (! mSimpleRuleMemberTest) {
-        rv = AddDefaultSimpleRules(aQuery, &parentNode);
-        if (NS_FAILED(rv))
-            return rv;
-    }
-
-    TestNode* prevnode = mSimpleRuleMemberTest;
-
-    // Add constraints for the LHS
-    const nsAttrName* name;
-    for (uint32_t i = 0; (name = aQueryElement->GetAttrNameAt(i)); ++i) {
-        // Note: some attributes must be skipped on XUL template query subtree
-
-        // never compare against rdf:property, rdf:instanceOf, {}:id or {}:parsetype attribute
-        if (name->Equals(nsGkAtoms::property, kNameSpaceID_RDF) ||
-            name->Equals(nsGkAtoms::instanceOf, kNameSpaceID_RDF) ||
-            name->Equals(nsGkAtoms::id, kNameSpaceID_None) ||
-            name->Equals(nsGkAtoms::parsetype, kNameSpaceID_None)) {
-            continue;
-        }
-
-        int32_t attrNameSpaceID = name->NamespaceID();
-        if (attrNameSpaceID == kNameSpaceID_XMLNS)
-          continue;
-        nsAtom* attr = name->LocalName();
-
-        nsAutoString value;
-        aQueryElement->GetAttr(attrNameSpaceID, attr, value);
-
-        TestNode* testnode = nullptr;
-
-        if (name->Equals(nsGkAtoms::iscontainer, kNameSpaceID_None) ||
-            name->Equals(nsGkAtoms::isempty, kNameSpaceID_None)) {
-
-            nsRDFConInstanceTestNode::Test iscontainer =
-                nsRDFConInstanceTestNode::eDontCare;
-
-            static Element::AttrValuesArray strings[] =
-              {&nsGkAtoms::_true, &nsGkAtoms::_false, nullptr};
-            switch (aQueryElement->FindAttrValueIn(kNameSpaceID_None,
-                                                   nsGkAtoms::iscontainer,
-                                                   strings, eCaseMatters)) {
-                case 0: iscontainer = nsRDFConInstanceTestNode::eTrue; break;
-                case 1: iscontainer = nsRDFConInstanceTestNode::eFalse; break;
-            }
-
-            nsRDFConInstanceTestNode::Test isempty =
-                nsRDFConInstanceTestNode::eDontCare;
-
-            switch (aQueryElement->FindAttrValueIn(kNameSpaceID_None,
-                                                   nsGkAtoms::isempty,
-                                                   strings, eCaseMatters)) {
-                case 0: isempty = nsRDFConInstanceTestNode::eTrue; break;
-                case 1: isempty = nsRDFConInstanceTestNode::eFalse; break;
-            }
-
-            testnode = new nsRDFConInstanceTestNode(prevnode,
-                                                    this,
-                                                    aQuery->mMemberVariable,
-                                                    iscontainer,
-                                                    isempty);
-
-            rv = mAllTests.Add(testnode);
-            if (NS_FAILED(rv)) {
-                delete testnode;
-                return rv;
-            }
-
-            rv = mRDFTests.Add(testnode);
-            if (NS_FAILED(rv))
-                return rv;
-        }
-        else if (attrNameSpaceID != kNameSpaceID_None || attr != nsGkAtoms::parent) {
-            // It's a simple RDF test
-            nsCOMPtr<nsIRDFResource> property;
-            rv = nsXULContentUtils::GetResource(attrNameSpaceID, attr, getter_AddRefs(property));
-            if (NS_FAILED(rv))
-                return rv;
-
-            // XXXwaterson this is so manky
-            nsCOMPtr<nsIRDFNode> target;
-            if (value.FindChar(':') != -1) { // XXXwaterson WRONG WRONG WRONG!
-                nsCOMPtr<nsIRDFResource> resource;
-                rv = gRDFService->GetUnicodeResource(value, getter_AddRefs(resource));
-                if (NS_FAILED(rv))
-                    return rv;
-
-                target = do_QueryInterface(resource);
-            }
-            else {
-              nsAutoString parseType;
-              aQueryElement->GetAttr(kNameSpaceID_None, nsGkAtoms::parsetype, parseType);
-              rv = ParseLiteral(parseType, value, getter_AddRefs(target));
-              if (NS_FAILED(rv))
-                  return rv;
-            }
-
-            testnode = new nsRDFPropertyTestNode(prevnode, this,
-                                                 aQuery->mMemberVariable, property, target);
-            rv = mAllTests.Add(testnode);
-            if (NS_FAILED(rv)) {
-                delete testnode;
-                return rv;
-            }
-
-            rv = mRDFTests.Add(testnode);
-            if (NS_FAILED(rv))
-                return rv;
-        }
-
-        if (testnode) {
-            if (prevnode) {
-                rv = prevnode->AddChild(testnode);
-                if (NS_FAILED(rv))
-                    return rv;
-            }
-            else {
-                aQuery->SetRoot(testnode);
-            }
-
-            prevnode = testnode;
-        }
-    }
-
-    *aLastNode = prevnode;
-
-    return NS_OK;
-}
-
-RDFBindingSet*
-nsXULTemplateQueryProcessorRDF::GetBindingsForRule(nsIDOMNode* aRuleNode)
-{
-    return mRuleToBindingsMap.GetWeak(aRuleNode);
-}
-
-void
-nsXULTemplateQueryProcessorRDF::AddBindingDependency(nsXULTemplateResultRDF* aResult,
-                                                     nsIRDFResource* aResource)
-{
-    ResultArray* arr;
-    if (!mBindingDependencies.Get(aResource, &arr)) {
-        arr = new ResultArray();
-
-        mBindingDependencies.Put(aResource, arr);
-    }
-
-    int32_t index = arr->IndexOf(aResult);
-    if (index == -1)
-        arr->AppendElement(aResult);
-}
-
-void
-nsXULTemplateQueryProcessorRDF::RemoveBindingDependency(nsXULTemplateResultRDF* aResult,
-                                                        nsIRDFResource* aResource)
-{
-    ResultArray* arr;
-    if (mBindingDependencies.Get(aResource, &arr)) {
-        int32_t index = arr->IndexOf(aResult);
-        if (index >= 0)
-            arr->RemoveElementAt(index);
-    }
-}
-
-
-nsresult
-nsXULTemplateQueryProcessorRDF::AddMemoryElements(const Instantiation& aInst,
-                                                  nsXULTemplateResultRDF* aResult)
-{
-    // Add the result to a table indexed by supporting MemoryElement
-    MemoryElementSet::ConstIterator last = aInst.mSupport.Last();
-    for (MemoryElementSet::ConstIterator element = aInst.mSupport.First();
-                                         element != last; ++element) {
-
-        PLHashNumber hash = (element.operator->())->Hash();
-
-        nsCOMArray<nsXULTemplateResultRDF>* arr;
-        if (!mMemoryElementToResultMap.Get(hash, &arr)) {
-            arr = new nsCOMArray<nsXULTemplateResultRDF>();
-            mMemoryElementToResultMap.Put(hash, arr);
-        }
-
-        // results may be added more than once so they will all get deleted properly
-        arr->AppendObject(aResult);
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::RemoveMemoryElements(const Instantiation& aInst,
-                                                     nsXULTemplateResultRDF* aResult)
-{
-    // Remove the results mapped by the supporting MemoryElement
-    MemoryElementSet::ConstIterator last = aInst.mSupport.Last();
-    for (MemoryElementSet::ConstIterator element = aInst.mSupport.First();
-                                         element != last; ++element) {
-
-        PLHashNumber hash = (element.operator->())->Hash();
-
-        nsCOMArray<nsXULTemplateResultRDF>* arr;
-        if (mMemoryElementToResultMap.Get(hash, &arr)) {
-            int32_t index = arr->IndexOf(aResult);
-            if (index >= 0)
-                arr->RemoveObjectAt(index);
-
-            uint32_t length = arr->Count();
-            if (! length)
-                mMemoryElementToResultMap.Remove(hash);
-        }
-    }
-
-    return NS_OK;
-}
-
-void
-nsXULTemplateQueryProcessorRDF::RetractElement(const MemoryElement& aMemoryElement)
-{
-    if (! mBuilder)
-        return;
-
-    // when an assertion is removed, look through the memory elements and
-    // find results that are associated with them. Those results will need
-    // to be removed because they no longer match.
-    PLHashNumber hash = aMemoryElement.Hash();
-
-    nsCOMArray<nsXULTemplateResultRDF>* arr;
-    if (mMemoryElementToResultMap.Get(hash, &arr)) {
-        uint32_t length = arr->Count();
-
-        for (int32_t r = length - 1; r >= 0; r--) {
-            nsXULTemplateResultRDF* result = (*arr)[r];
-            if (result) {
-                // because the memory elements are hashed by an integer,
-                // sometimes two different memory elements will have the same
-                // hash code. In this case we check the result to make sure
-                // and only remove those that refer to that memory element.
-                if (result->HasMemoryElement(aMemoryElement)) {
-                    nsITemplateRDFQuery* query = result->Query();
-                    if (query) {
-                        nsCOMPtr<nsIDOMNode> querynode;
-                        query->GetQueryNode(getter_AddRefs(querynode));
-
-                        mBuilder->RemoveResult(result);
-                    }
-
-                    // a call to RemoveMemoryElements may have removed it
-                    if (!mMemoryElementToResultMap.Get(hash, nullptr))
-                        return;
-
-                    // the array should have been reduced by one, but check
-                    // just to make sure
-                    uint32_t newlength = arr->Count();
-                    if (r > (int32_t)newlength)
-                        r = newlength;
-                }
-            }
-        }
-
-        // if there are no items left, remove the memory element from the hashtable
-        if (!arr->Count())
-            mMemoryElementToResultMap.Remove(hash);
-    }
-}
-
-int32_t
-nsXULTemplateQueryProcessorRDF::GetContainerIndexOf(nsIXULTemplateResult* aResult)
-{
-    // get the reference variable and look up the container in the result
-    nsCOMPtr<nsISupports> ref;
-    nsresult rv = aResult->GetBindingObjectFor(mRefVariable,
-                                               getter_AddRefs(ref));
-    if (NS_FAILED(rv) || !mDB)
-        return -1;
-
-    nsCOMPtr<nsIRDFResource> container = do_QueryInterface(ref);
-    if (container) {
-        // if the container is an RDF Seq, return the index of the result
-        // in the container.
-        bool isSequence = false;
-        gRDFContainerUtils->IsSeq(mDB, container, &isSequence);
-        if (isSequence) {
-            nsCOMPtr<nsIRDFResource> resource;
-            aResult->GetResource(getter_AddRefs(resource));
-            if (resource) {
-                int32_t index;
-                gRDFContainerUtils->IndexOf(mDB, container, resource, &index);
-                return index;
-            }
-        }
-    }
-
-    // if the container isn't a Seq, or the result isn't in the container,
-    // return -1 indicating no index.
-    return -1;
-}
-
-nsresult
-nsXULTemplateQueryProcessorRDF::GetSortValue(nsIXULTemplateResult* aResult,
-                                             nsIRDFResource* aPredicate,
-                                             nsIRDFResource* aSortPredicate,
-                                             nsISupports** aResultNode)
-{
-    nsCOMPtr<nsIRDFResource> source;
-    nsresult rv = aResult->GetResource(getter_AddRefs(source));
-    if (NS_FAILED(rv))
-        return rv;
-
-    nsCOMPtr<nsIRDFNode> value;
-    if (source && mDB) {
-        // first check predicate?sort=true so that datasources may use a
-        // custom value for sorting
-        rv = mDB->GetTarget(source, aSortPredicate, true,
-                            getter_AddRefs(value));
-        if (NS_FAILED(rv))
-            return rv;
-
-        if (!value) {
-            rv = mDB->GetTarget(source, aPredicate, true,
-                                getter_AddRefs(value));
-            if (NS_FAILED(rv))
-                return rv;
-        }
-    }
-
-    *aResultNode = value;
-    NS_IF_ADDREF(*aResultNode);
-    return NS_OK;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateQueryProcessorRDF.h
+++ /dev/null
@@ -1,355 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-
-#ifndef nsXULTemplateQueryProcessorRDF_h__
-#define nsXULTemplateQueryProcessorRDF_h__
-
-#include "nsIRDFContainer.h"
-#include "nsIRDFContainerUtils.h"
-#include "nsIRDFDataSource.h"
-#include "nsIRDFObserver.h"
-#include "nsIRDFService.h"
-#include "nsIXULTemplateBuilder.h"
-#include "nsIXULTemplateQueryProcessor.h"
-#include "nsCollationCID.h"
-
-#include "nsResourceSet.h"
-#include "nsRuleNetwork.h"
-#include "nsRDFQuery.h"
-#include "nsRDFBinding.h"
-#include "nsXULTemplateResultSetRDF.h"
-#include "nsCOMArray.h"
-#include "nsString.h"
-#include "nsClassHashtable.h"
-#include "nsRefPtrHashtable.h"
-#include "nsCycleCollectionParticipant.h"
-#include "mozilla/Attributes.h"
-
-#include "mozilla/Logging.h"
-extern mozilla::LazyLogModule gXULTemplateLog;
-
-class nsIContent;
-class nsXULTemplateResultRDF;
-
-namespace mozilla {
-namespace dom {
-class Element;
-}
-}
-
-/**
- * An object that generates results from a query on an RDF graph
- */
-class nsXULTemplateQueryProcessorRDF final : public nsIXULTemplateQueryProcessor,
-                                             public nsIRDFObserver
-{
-public:
-    typedef nsTArray<RefPtr<nsXULTemplateResultRDF> > ResultArray;
-
-    nsXULTemplateQueryProcessorRDF();
-
-    nsresult InitGlobals();
-
-    // nsISupports interface
-    NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-    NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsXULTemplateQueryProcessorRDF,
-                                             nsIXULTemplateQueryProcessor)
-
-    // nsIXULTemplateQueryProcessor interface
-    NS_DECL_NSIXULTEMPLATEQUERYPROCESSOR
-
-    // nsIRDFObserver interface
-    NS_DECL_NSIRDFOBSERVER
-
-    /*
-     * Propagate all changes through the rule network when an assertion is
-     * added to the graph, adding any new results.
-     */
-    nsresult
-    Propagate(nsIRDFResource* aSource,
-              nsIRDFResource* aProperty,
-              nsIRDFNode* aTarget);
-
-    /*
-     * Retract all changes through the rule network when an assertion is
-     * removed from the graph, removing any results that no longer match.
-     */
-    nsresult
-    Retract(nsIRDFResource* aSource,
-            nsIRDFResource* aProperty,
-            nsIRDFNode* aTarget);
-
-    /*
-     * Synchronize results when the graph changes, updating their bindings.
-     */
-    nsresult
-    SynchronizeAll(nsIRDFResource* aSource,
-                   nsIRDFResource* aProperty,
-                   nsIRDFNode* aOldTarget,
-                   nsIRDFNode* aNewTarget);
-
-    /*
-     * Return true if a resource is a container
-     */
-    nsresult
-    CheckContainer(nsIRDFResource* aTargetResource,
-                   bool* aIsContainer);
-
-    /*
-     * Check if a resource does not have any children
-     */
-    nsresult
-    CheckEmpty(nsIRDFResource* aTargetResource,
-               bool* aIsEmpty);
-
-    /**
-     * Check if a resource is a separator
-     */
-    nsresult
-    CheckIsSeparator(nsIRDFResource* aResource, bool* aIsSeparator);
-
-    /*
-     * Compute the containment properties which are additional arcs which
-     * indicate that a node is a container, in additional to the RDF container
-     * tests. The computed list is stored in mContainmentProperties
-     */
-    nsresult
-    ComputeContainmentProperties(nsIDOMNode* aRootNode);
-
-    /**
-     * Compile a query that uses the extended template syntax. The last
-     * compiled node of the query is returned as aLastNode. This node will
-     * have been added to mAllTests which owns the node.
-     */
-    nsresult
-    CompileExtendedQuery(nsRDFQuery* aQuery,
-                         nsIContent* aConditions,
-                         TestNode** aLastNode);
-
-    /**
-     * Compile a single query child and return the compiled node in aResult.
-     * This node will have been added to mAllTests which owns the node and
-     * set as a child of aParentNode.
-     */
-    virtual nsresult
-    CompileQueryChild(nsAtom* aTag,
-                      nsRDFQuery* aQuery,
-                      nsIContent* aConditions,
-                      TestNode* aParentNode,
-                      TestNode** aResult);
-
-    /**
-     * Parse the value of a property test assertion for a condition or a simple
-     * rule based on the parseType attribute into the appropriate literal type.
-     */
-    nsresult ParseLiteral(const nsString& aParseType,
-                          const nsString& aValue,
-                          nsIRDFNode** aResult);
-
-    /**
-     * Compile a <triple> condition and return the compiled node in aResult.
-     * This node will have been added to mAllTests which owns the node and
-     * set as a child of aParentNode.
-     */
-    nsresult
-    CompileTripleCondition(nsRDFQuery* aQuery,
-                           Element* aCondition,
-                           TestNode* aParentNode,
-                           TestNode** aResult);
-
-    /**
-     * Compile a <member> condition and return the compiled node in aResult.
-     * This node will have been added to mAllTests which owns the node and
-     * set as a child of aParentNode.
-     */
-    nsresult
-    CompileMemberCondition(nsRDFQuery* aQuery,
-                           Element* aCondition,
-                           TestNode* aParentNode,
-                           TestNode** aResult);
-
-    /**
-     * Add the default rules shared by all simple queries. This creates
-     * the content start node followed by a member test. The member TestNode
-     * is returned in aChildNode. Both nodes will have been added to mAllTests
-     * which owns the nodes.
-     */
-    nsresult
-    AddDefaultSimpleRules(nsRDFQuery* aQuery,
-                          TestNode** aChildNode);
-
-    /**
-     * Compile a query that's specified using the simple template
-     * syntax. Each  TestNode is created in a chain, the last compiled node
-     * is returned as aLastNode. All nodes will have been added to mAllTests
-     * which owns the nodes.
-     */
-    nsresult
-    CompileSimpleQuery(nsRDFQuery* aQuery,
-                       mozilla::dom::Element* aQueryElement,
-                       TestNode** aLastNode);
-
-    RDFBindingSet*
-    GetBindingsForRule(nsIDOMNode* aRule);
-
-    /*
-     * Indicate that a result is dependant on a particular resource. When an
-     * assertion is added to or removed from the graph involving that
-     * resource, that result must be recalculated.
-     */
-    void
-    AddBindingDependency(nsXULTemplateResultRDF* aResult,
-                         nsIRDFResource* aResource);
-
-    /**
-     * Remove a dependency a result has on a particular resource.
-     */
-    void
-    RemoveBindingDependency(nsXULTemplateResultRDF* aResult,
-                            nsIRDFResource* aResource);
-
-    /**
-     * A memory element is a hash of an RDF triple. One exists for each triple
-     * that was involved in generating a result. This function adds this to a
-     * map, keyed by memory element, when the value is a list of results that
-     * depend on that memory element. When an RDF triple is removed from the
-     * datasource, RetractElement is called, and this map is examined to
-     * determine which results are no longer valid.
-     */
-    nsresult
-    AddMemoryElements(const Instantiation& aInst,
-                      nsXULTemplateResultRDF* aResult);
-
-    /**
-     * Remove the memory elements associated with a result when the result is
-     * no longer being used.
-     */
-    nsresult
-    RemoveMemoryElements(const Instantiation& aInst,
-                         nsXULTemplateResultRDF* aResult);
-
-    /**
-     * Remove the results associated with a memory element since the
-     * RDF triple the memory element is a hash of has been removed.
-     */
-    void RetractElement(const MemoryElement& aMemoryElement);
-
-    /**
-     * Return the index of a result's resource in its RDF container
-     */
-    int32_t
-    GetContainerIndexOf(nsIXULTemplateResult* aResult);
-
-    /**
-     * Given a result and a predicate to sort on, get the target value of
-     * the triple to use for sorting. The sort predicate is the predicate
-     * with '?sort=true' appended.
-     */
-    nsresult
-    GetSortValue(nsIXULTemplateResult* aResult,
-                 nsIRDFResource* aPredicate,
-                 nsIRDFResource* aSortPredicate,
-                 nsISupports** aResultNode);
-
-    nsIRDFDataSource* GetDataSource() { return mDB; }
-
-    nsIXULTemplateBuilder* GetBuilder() { return mBuilder; }
-
-    nsResourceSet& ContainmentProperties() { return mContainmentProperties; }
-
-    nsresult
-    Log(const char* aOperation,
-        nsIRDFResource* aSource,
-        nsIRDFResource* aProperty,
-        nsIRDFNode* aTarget);
-
-#define LOG(_op, _src, _prop, _targ) \
-    Log(_op, _src, _prop, _targ)
-
-protected:
-    ~nsXULTemplateQueryProcessorRDF();
-
-    // We are an observer of the composite datasource. The cycle is
-    // broken when the document is destroyed.
-    nsCOMPtr<nsIRDFDataSource> mDB;
-
-    // weak reference to the builder, cleared when the document is destroyed
-    nsIXULTemplateBuilder* mBuilder;
-
-    // true if the query processor has been initialized
-    bool mQueryProcessorRDFInited;
-
-    // true if results have been generated. Once set, bindings can no longer
-    // be added. If they were, the binding value arrays for results that have
-    // already been generated would be the wrong size
-    bool mGenerationStarted;
-
-    // nesting level for RDF batch notifications
-    int32_t mUpdateBatchNest;
-
-    // containment properties that are checked to determine if a resource is
-    // a container
-    nsResourceSet mContainmentProperties;
-
-    // the end node of the default simple node hierarchy
-    TestNode* mSimpleRuleMemberTest;
-
-    // the reference variable
-    RefPtr<nsAtom> mRefVariable;
-
-    // the last ref that was calculated, used for simple rules
-    nsCOMPtr<nsIXULTemplateResult> mLastRef;
-
-    /**
-     * A map between nsIRDFNodes that form the left-hand side (the subject) of
-     * a <binding> and an array of nsIXULTemplateResults. When a new assertion
-     * is added to the graph involving a particular rdf node, it is looked up
-     * in this binding map. If it exists, the corresponding results must then
-     * be synchronized.
-     */
-    nsClassHashtable<nsISupportsHashKey, ResultArray> mBindingDependencies;
-
-    /**
-     * A map between memory elements and an array of nsIXULTemplateResults.
-     * When a triple is unasserted from the graph, the corresponding results
-     * no longer match so they must be removed.
-     */
-    nsClassHashtable<nsUint32HashKey,
-                     nsCOMArray<nsXULTemplateResultRDF> > mMemoryElementToResultMap;
-
-    // map of the rules to the bindings for those rules.
-    // XXXndeakin this might be better just as an array since there is usually
-    //            ten or fewer rules
-    nsRefPtrHashtable<nsISupportsHashKey, RDFBindingSet> mRuleToBindingsMap;
-
-    /**
-     * The queries
-     */
-    nsTArray<nsCOMPtr<nsITemplateRDFQuery> > mQueries;
-
-    /**
-     * All of the RDF tests in the rule network, which are checked when a new
-     * assertion is added to the graph. This is a subset of mAllTests, which
-     * also includes non-RDF tests.
-     */
-    ReteNodeSet mRDFTests;
-
-    /**
-     * All of the tests in the rule network, owned by this list
-     */
-    ReteNodeSet mAllTests;
-
-    // pseudo-constants
-    static nsrefcnt gRefCnt;
-
-public:
-    static nsIRDFService*            gRDFService;
-    static nsIRDFContainerUtils*     gRDFContainerUtils;
-    static nsIRDFResource*           kNC_BookmarkSeparator;
-    static nsIRDFResource*           kRDF_type;
-};
-
-#endif // nsXULTemplateQueryProcessorRDF_h__
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateQueryProcessorStorage.cpp
+++ /dev/null
@@ -1,507 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "prprf.h"
-
-#include "nsIDOMNodeList.h"
-#include "nsUnicharUtils.h"
-
-#include "nsArrayUtils.h"
-#include "nsVariant.h"
-#include "nsAppDirectoryServiceDefs.h"
-
-#include "nsIURI.h"
-#include "nsIFileChannel.h"
-#include "nsIFile.h"
-#include "nsGkAtoms.h"
-#include "nsContentUtils.h"
-
-#include "nsXULTemplateBuilder.h"
-#include "nsXULTemplateResultStorage.h"
-#include "nsXULContentUtils.h"
-#include "nsXULSortService.h"
-
-#include "mozIStorageService.h"
-#include "nsIChannel.h"
-#include "nsIDocument.h"
-#include "nsNetUtil.h"
-#include "nsTemplateMatch.h"
-
-//----------------------------------------------------------------------
-//
-// nsXULTemplateResultSetStorage
-//
-
-NS_IMPL_ISUPPORTS(nsXULTemplateResultSetStorage, nsISimpleEnumerator)
-
-
-nsXULTemplateResultSetStorage::nsXULTemplateResultSetStorage(mozIStorageStatement* aStatement)
-        : mStatement(aStatement)
-{
-    uint32_t count;
-    nsresult rv = aStatement->GetColumnCount(&count);
-    if (NS_FAILED(rv)) {
-        mStatement = nullptr;
-        return;
-    }
-    for (uint32_t c = 0; c < count; c++) {
-        nsAutoCString name;
-        rv = aStatement->GetColumnName(c, name);
-        if (NS_SUCCEEDED(rv)) {
-            RefPtr<nsAtom> columnName = NS_Atomize(NS_LITERAL_CSTRING("?") + name);
-            mColumnNames.AppendElement(columnName);
-        }
-    }
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultSetStorage::HasMoreElements(bool *aResult)
-{
-    if (!mStatement) {
-        *aResult = false;
-        return NS_OK;
-    }
-
-    nsresult rv = mStatement->ExecuteStep(aResult);
-    NS_ENSURE_SUCCESS(rv, rv);
-    // Because the nsXULTemplateResultSetStorage is owned by many nsXULTemplateResultStorage objects,
-    // it could live longer than it needed to get results.
-    // So we destroy the statement to free resources when all results are fetched
-    if (!*aResult) {
-        mStatement = nullptr;
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultSetStorage::GetNext(nsISupports **aResult)
-{
-    nsXULTemplateResultStorage* result =
-        new nsXULTemplateResultStorage(this);
-    *aResult = result;
-    NS_ADDREF(result);
-    return NS_OK;
-}
-
-
-int32_t
-nsXULTemplateResultSetStorage::GetColumnIndex(nsAtom* aColumnName)
-{
-    int32_t count = mColumnNames.Length();
-    for (int32_t c = 0; c < count; c++) {
-        if (mColumnNames[c] == aColumnName)
-            return c;
-    }
-
-    return -1;
-}
-
-void
-nsXULTemplateResultSetStorage::FillColumnValues(nsCOMArray<nsIVariant>& aArray)
-{
-    if (!mStatement)
-        return;
-
-    int32_t count = mColumnNames.Length();
-
-    for (int32_t c = 0; c < count; c++) {
-        RefPtr<nsVariant> value = new nsVariant();
-
-        int32_t type;
-        mStatement->GetTypeOfIndex(c, &type);
-
-        if (type == mStatement->VALUE_TYPE_INTEGER) {
-            int64_t val = mStatement->AsInt64(c);
-            value->SetAsInt64(val);
-        }
-        else if (type == mStatement->VALUE_TYPE_FLOAT) {
-            double val = mStatement->AsDouble(c);
-            value->SetAsDouble(val);
-        }
-        else {
-            nsAutoString val;
-            nsresult rv = mStatement->GetString(c, val);
-            if (NS_FAILED(rv))
-                value->SetAsAString(EmptyString());
-            else
-                value->SetAsAString(val);
-        }
-        aArray.AppendObject(value);
-    }
-}
-
-
-
-//----------------------------------------------------------------------
-//
-// nsXULTemplateQueryProcessorStorage
-//
-
-NS_IMPL_ISUPPORTS(nsXULTemplateQueryProcessorStorage,
-                  nsIXULTemplateQueryProcessor)
-
-
-nsXULTemplateQueryProcessorStorage::nsXULTemplateQueryProcessorStorage()
-    : mGenerationStarted(false)
-{
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorStorage::GetDatasource(nsIArray* aDataSources,
-                                                  nsIDOMNode* aRootNode,
-                                                  bool aIsTrusted,
-                                                  nsIXULTemplateBuilder* aBuilder,
-                                                  bool* aShouldDelayBuilding,
-                                                  nsISupports** aReturn)
-{
-    *aReturn = nullptr;
-    *aShouldDelayBuilding = false;
-
-    if (!aIsTrusted) {
-        return NS_OK;
-    }
-
-    uint32_t length;
-    nsresult rv = aDataSources->GetLength(&length);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    if (length == 0) {
-        return NS_OK;
-    }
-
-    // We get only the first uri. This query processor supports
-    // only one database at a time.
-    nsCOMPtr<nsIURI> uri;
-    uri = do_QueryElementAt(aDataSources, 0);
-
-    if (!uri) {
-        // No uri in the list of datasources
-        return NS_OK;
-    }
-
-    nsCOMPtr<mozIStorageService> storage =
-        do_GetService("@mozilla.org/storage/service;1", &rv);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    nsCOMPtr<nsIFile> databaseFile;
-    nsAutoCString scheme;
-    rv = uri->GetScheme(scheme);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    if (scheme.EqualsLiteral("profile")) {
-
-        nsAutoCString path;
-        rv = uri->GetPathQueryRef(path);
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        if (path.IsEmpty()) {
-            return NS_ERROR_FAILURE;
-        }
-
-        rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
-                                             getter_AddRefs(databaseFile));
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        rv = databaseFile->AppendNative(path);
-        NS_ENSURE_SUCCESS(rv, rv);
-    }
-    else {
-        nsCOMPtr<nsIChannel> channel;
-        nsCOMPtr<nsINode> node = do_QueryInterface(aRootNode);
-
-        // The following channel is never openend, so it does not matter what
-        // securityFlags we pass; let's follow the principle of least privilege.
-        rv = NS_NewChannel(getter_AddRefs(channel),
-                           uri,
-                           node,
-                           nsILoadInfo::SEC_REQUIRE_SAME_ORIGIN_DATA_IS_BLOCKED,
-                           nsIContentPolicy::TYPE_OTHER);
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        nsCOMPtr<nsIFileChannel> fileChannel = do_QueryInterface(channel, &rv);
-        if (NS_FAILED(rv)) { // if it fails, not a file url
-            nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_STORAGE_BAD_URI);
-            return rv;
-        }
-
-        rv = fileChannel->GetFile(getter_AddRefs(databaseFile));
-        NS_ENSURE_SUCCESS(rv, rv);
-    }
-
-    // ok now we have an URI of a sqlite file
-    nsCOMPtr<mozIStorageConnection> connection;
-    rv = storage->OpenDatabase(databaseFile, getter_AddRefs(connection));
-    if (NS_FAILED(rv)) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_STORAGE_CANNOT_OPEN_DATABASE);
-        return rv;
-    }
-
-    connection.forget(aReturn);
-    return NS_OK;
-}
-
-
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorStorage::InitializeForBuilding(nsISupports* aDatasource,
-                                                          nsIXULTemplateBuilder* aBuilder,
-                                                          nsIDOMNode* aRootNode)
-{
-    NS_ENSURE_STATE(!mGenerationStarted);
-
-    mStorageConnection = do_QueryInterface(aDatasource);
-    if (!mStorageConnection)
-        return NS_ERROR_INVALID_ARG;
-
-    bool ready;
-    mStorageConnection->GetConnectionReady(&ready);
-    if (!ready)
-      return NS_ERROR_UNEXPECTED;
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorStorage::Done()
-{
-    mGenerationStarted = false;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorStorage::CompileQuery(nsIXULTemplateBuilder* aBuilder,
-                                                 nsIDOMNode* aQueryNode,
-                                                 nsAtom* aRefVariable,
-                                                 nsAtom* aMemberVariable,
-                                                 nsISupports** aReturn)
-{
-    nsCOMPtr<nsIDOMNodeList> childNodes;
-    aQueryNode->GetChildNodes(getter_AddRefs(childNodes));
-
-    uint32_t length;
-    childNodes->GetLength(&length);
-
-    nsCOMPtr<mozIStorageStatement> statement;
-    nsCOMPtr<nsIContent> queryContent = do_QueryInterface(aQueryNode);
-    nsAutoString sqlQuery;
-
-    // Let's get all text nodes (which should be the query)
-    if (!nsContentUtils::GetNodeTextContent(queryContent, false, sqlQuery, fallible)) {
-      return NS_ERROR_OUT_OF_MEMORY;
-    }
-
-    nsresult rv = mStorageConnection->CreateStatement(NS_ConvertUTF16toUTF8(sqlQuery),
-                                                              getter_AddRefs(statement));
-    if (NS_FAILED(rv)) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_STORAGE_BAD_QUERY);
-        return rv;
-    }
-
-    uint32_t parameterCount = 0;
-    for (nsIContent* child = queryContent->GetFirstChild();
-         child;
-         child = child->GetNextSibling()) {
-
-        if (child->NodeInfo()->Equals(nsGkAtoms::param, kNameSpaceID_XUL)) {
-            nsAutoString value;
-            if (!nsContentUtils::GetNodeTextContent(child, false, value, fallible)) {
-              return NS_ERROR_OUT_OF_MEMORY;
-            }
-
-            uint32_t index = parameterCount;
-            nsAutoString name, indexValue;
-
-            if (child->AsElement()->GetAttr(kNameSpaceID_None,
-                                            nsGkAtoms::name,
-                                            name)) {
-                rv = statement->GetParameterIndex(NS_ConvertUTF16toUTF8(name),
-                                                  &index);
-                if (NS_FAILED(rv)) {
-                    nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_STORAGE_UNKNOWN_QUERY_PARAMETER);
-                    return rv;
-                }
-                parameterCount++;
-            } else if (child->AsElement()->GetAttr(kNameSpaceID_None,
-                                                   nsGkAtoms::index,
-                                                   indexValue)) {
-                PR_sscanf(NS_ConvertUTF16toUTF8(indexValue).get(),"%d",&index);
-                if (index > 0)
-                    index--;
-            }
-            else {
-                parameterCount++;
-            }
-
-            static Element::AttrValuesArray sTypeValues[] =
-                { &nsGkAtoms::int32, &nsGkAtoms::integer, &nsGkAtoms::int64,
-                  &nsGkAtoms::null, &nsGkAtoms::double_, &nsGkAtoms::string, nullptr };
-
-            int32_t typeError = 1;
-            int32_t typeValue = child->AsElement()->
-              FindAttrValueIn(kNameSpaceID_None, nsGkAtoms::type, sTypeValues,
-                              eCaseMatters);
-            rv = NS_ERROR_ILLEGAL_VALUE;
-            int32_t valInt32 = 0;
-            int64_t valInt64 = 0;
-            double valFloat = 0;
-
-            switch (typeValue) {
-              case 0:
-              case 1:
-                typeError = PR_sscanf(NS_ConvertUTF16toUTF8(value).get(),"%d",&valInt32);
-                if (typeError > 0)
-                    rv = statement->BindInt32ByIndex(index, valInt32);
-                break;
-              case 2:
-                typeError = PR_sscanf(NS_ConvertUTF16toUTF8(value).get(),"%lld",&valInt64);
-                if (typeError > 0)
-                    rv = statement->BindInt64ByIndex(index, valInt64);
-                break;
-              case 3:
-                rv = statement->BindNullByIndex(index);
-                break;
-              case 4:
-                typeError = PR_sscanf(NS_ConvertUTF16toUTF8(value).get(),"%lf",&valFloat);
-                if (typeError > 0)
-                    rv = statement->BindDoubleByIndex(index, valFloat);
-                break;
-              case 5:
-              case Element::ATTR_MISSING:
-                rv = statement->BindStringByIndex(index, value);
-                break;
-              default:
-                typeError = 0;
-            }
-
-            if (typeError <= 0) {
-                nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_STORAGE_WRONG_TYPE_QUERY_PARAMETER);
-                return rv;
-            }
-
-            if (NS_FAILED(rv)) {
-                nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_STORAGE_QUERY_PARAMETER_NOT_BOUND);
-                return rv;
-            }
-        }
-    }
-
-    *aReturn = statement;
-    NS_IF_ADDREF(*aReturn);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorStorage::GenerateResults(nsISupports* aDatasource,
-                                                    nsIXULTemplateResult* aRef,
-                                                    nsISupports* aQuery,
-                                                    nsISimpleEnumerator** aResults)
-{
-    mGenerationStarted = true;
-
-    nsCOMPtr<mozIStorageStatement> statement = do_QueryInterface(aQuery);
-    if (!statement)
-        return NS_ERROR_FAILURE;
-
-    nsXULTemplateResultSetStorage* results =
-        new nsXULTemplateResultSetStorage(statement);
-    *aResults = results;
-    NS_ADDREF(*aResults);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorStorage::AddBinding(nsIDOMNode* aRuleNode,
-                                               nsAtom* aVar,
-                                               nsAtom* aRef,
-                                               const nsAString& aExpr)
-{
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorStorage::TranslateRef(nsISupports* aDatasource,
-                                                 const nsAString& aRefString,
-                                                 nsIXULTemplateResult** aRef)
-{
-    nsXULTemplateResultStorage* result =
-        new nsXULTemplateResultStorage(nullptr);
-    *aRef = result;
-    NS_ADDREF(*aRef);
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorStorage::CompareResults(nsIXULTemplateResult* aLeft,
-                                                   nsIXULTemplateResult* aRight,
-                                                   nsAtom* aVar,
-                                                   uint32_t aSortHints,
-                                                   int32_t* aResult)
-{
-    *aResult = 0;
-    if (!aVar)
-      return NS_OK;
-
-    // We're going to see if values are integers or float, to perform
-    // a suitable comparison
-    nsCOMPtr<nsISupports> leftValue, rightValue;
-    if (aLeft)
-      aLeft->GetBindingObjectFor(aVar, getter_AddRefs(leftValue));
-    if (aRight)
-      aRight->GetBindingObjectFor(aVar, getter_AddRefs(rightValue));
-
-    if (leftValue && rightValue) {
-        nsCOMPtr<nsIVariant> vLeftValue = do_QueryInterface(leftValue);
-        nsCOMPtr<nsIVariant> vRightValue = do_QueryInterface(rightValue);
-
-        if (vLeftValue && vRightValue) {
-            nsresult rv1, rv2;
-            uint16_t vtypeL, vtypeR;
-            vLeftValue->GetDataType(&vtypeL);
-            vRightValue->GetDataType(&vtypeR);
-
-            if (vtypeL == vtypeR) {
-                if (vtypeL == nsIDataType::VTYPE_INT64) {
-                    int64_t leftValue, rightValue;
-                    rv1 = vLeftValue->GetAsInt64(&leftValue);
-                    rv2 = vRightValue->GetAsInt64(&rightValue);
-                    if (NS_SUCCEEDED(rv1) && NS_SUCCEEDED(rv2)) {
-                        if (leftValue > rightValue)
-                            *aResult = 1;
-                        else if (leftValue < rightValue)
-                            *aResult = -1;
-                        return NS_OK;
-                    }
-                }
-                else if (vtypeL == nsIDataType::VTYPE_DOUBLE) {
-                    double leftValue, rightValue;
-                    rv1 = vLeftValue->GetAsDouble(&leftValue);
-                    rv2 = vRightValue->GetAsDouble(&rightValue);
-                    if (NS_SUCCEEDED(rv1) && NS_SUCCEEDED(rv2)) {
-                        if (leftValue > rightValue)
-                            *aResult = 1;
-                        else if (leftValue < rightValue)
-                            *aResult = -1;
-                        return NS_OK;
-                    }
-                }
-            }
-        }
-    }
-
-    // Values are not integers or floats, so we just compare them as simple strings
-    nsAutoString leftVal;
-    if (aLeft)
-        aLeft->GetBindingFor(aVar, leftVal);
-
-    nsAutoString rightVal;
-    if (aRight)
-        aRight->GetBindingFor(aVar, rightVal);
-
-    *aResult = XULSortServiceImpl::CompareValues(leftVal, rightVal, aSortHints);
-    return NS_OK;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateQueryProcessorStorage.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsXULTemplateQueryProcessorStorage_h__
-#define nsXULTemplateQueryProcessorStorage_h__
-
-#include "nsIXULTemplateBuilder.h"
-#include "nsIXULTemplateQueryProcessor.h"
-
-#include "nsISimpleEnumerator.h"
-#include "nsCOMArray.h"
-#include "nsIVariant.h"
-
-#include "mozIStorageValueArray.h"
-#include "mozIStorageStatement.h"
-#include "mozIStorageConnection.h"
-#include "mozilla/Attributes.h"
-
-class nsXULTemplateQueryProcessorStorage;
-
-class nsXULTemplateResultSetStorage final : public nsISimpleEnumerator
-{
-private:
-
-    nsCOMPtr<mozIStorageStatement> mStatement;
-
-    nsTArray<RefPtr<nsAtom>> mColumnNames;
-
-    ~nsXULTemplateResultSetStorage() {}
-
-public:
-
-    // nsISupports interface
-    NS_DECL_ISUPPORTS
-
-    // nsISimpleEnumerator interface
-    NS_DECL_NSISIMPLEENUMERATOR
-
-    explicit nsXULTemplateResultSetStorage(mozIStorageStatement* aStatement);
-
-    int32_t GetColumnIndex(nsAtom* aColumnName);
-
-    void FillColumnValues(nsCOMArray<nsIVariant>& aArray);
-
-};
-
-class nsXULTemplateQueryProcessorStorage final : public nsIXULTemplateQueryProcessor
-{
-public:
-
-    nsXULTemplateQueryProcessorStorage();
-
-    // nsISupports interface
-    NS_DECL_ISUPPORTS
-
-    // nsIXULTemplateQueryProcessor interface
-    NS_DECL_NSIXULTEMPLATEQUERYPROCESSOR
-
-private:
-
-    ~nsXULTemplateQueryProcessorStorage() {}
-
-    nsCOMPtr<mozIStorageConnection> mStorageConnection;
-    bool mGenerationStarted;
-};
-
-#endif // nsXULTemplateQueryProcessorStorage_h__
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateQueryProcessorXML.cpp
+++ /dev/null
@@ -1,451 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsCOMPtr.h"
-#include "nsAutoPtr.h"
-#include "nsIDOMDocument.h"
-#include "nsIDOMNode.h"
-#include "nsIDOMElement.h"
-#include "nsIDOMEvent.h"
-#include "nsIDocument.h"
-#include "nsIContent.h"
-#include "nsComponentManagerUtils.h"
-#include "nsGkAtoms.h"
-#include "nsIURI.h"
-#include "nsIArray.h"
-#include "nsIScriptContext.h"
-#include "nsArrayUtils.h"
-#include "nsPIDOMWindow.h"
-#include "nsXULContentUtils.h"
-#include "mozilla/dom/XPathEvaluator.h"
-#include "nsXULTemplateQueryProcessorXML.h"
-#include "nsXULTemplateResultXML.h"
-#include "nsXULSortService.h"
-#include "mozilla/dom/Element.h"
-#include "mozilla/dom/XMLHttpRequest.h"
-
-using namespace mozilla;
-using namespace mozilla::dom;
-
-NS_IMPL_ISUPPORTS(nsXMLQuery, nsXMLQuery)
-
-//----------------------------------------------------------------------
-//
-// nsXULTemplateResultSetXML
-//
-
-NS_IMPL_ISUPPORTS(nsXULTemplateResultSetXML, nsISimpleEnumerator)
-
-NS_IMETHODIMP
-nsXULTemplateResultSetXML::HasMoreElements(bool *aResult)
-{
-    // if GetSnapshotLength failed, then the return type was not a set of
-    // nodes, so just return false in this case.
-    ErrorResult rv;
-    uint32_t length = mResults->GetSnapshotLength(rv);
-    if (NS_WARN_IF(rv.Failed())) {
-      rv.SuppressException();
-      *aResult = false;
-      return NS_OK;
-    }
-
-    *aResult = mPosition < length;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultSetXML::GetNext(nsISupports **aResult)
-{
-    ErrorResult rv;
-    nsINode* node = mResults->SnapshotItem(mPosition, rv);
-    if (rv.Failed()) {
-        return rv.StealNSResult();
-    }
-
-    nsXULTemplateResultXML* result =
-        new nsXULTemplateResultXML(mQuery, node->AsContent(), mBindingSet);
-
-    ++mPosition;
-    *aResult = result;
-    NS_ADDREF(result);
-    return NS_OK;
-}
-
-
-//----------------------------------------------------------------------
-//
-// nsXULTemplateQueryProcessorXML
-//
-
-NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULTemplateQueryProcessorXML)
-
-NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsXULTemplateQueryProcessorXML)
-    tmp->mRuleToBindingsMap.Clear();
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mRoot)
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mEvaluator)
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mTemplateBuilder)
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mRequest)
-NS_IMPL_CYCLE_COLLECTION_UNLINK_END
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsXULTemplateQueryProcessorXML)
-    for (auto it = tmp->mRuleToBindingsMap.Iter(); !it.Done(); it.Next()) {
-        NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mRuleToBindingsMap key");
-        cb.NoteXPCOMChild(it.Key());
-    }
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mRoot)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mEvaluator)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTemplateBuilder)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mRequest)
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTING_ADDREF(nsXULTemplateQueryProcessorXML)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(nsXULTemplateQueryProcessorXML)
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXULTemplateQueryProcessorXML)
-    NS_INTERFACE_MAP_ENTRY(nsIXULTemplateQueryProcessor)
-    NS_INTERFACE_MAP_ENTRY(nsIDOMEventListener)
-    NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIXULTemplateQueryProcessor)
-NS_INTERFACE_MAP_END
-
-/*
- * Only the first datasource in aDataSource is used, which should be either an
- * nsIURI of an XML document, or a DOM node. If the former, GetDatasource will
- * load the document asynchronously and return null in aResult. Once the
- * document has loaded, the builder's datasource will be set to the XML
- * document. If the datasource is a DOM node, the node will be returned in
- * aResult.
- */
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorXML::GetDatasource(nsIArray* aDataSources,
-                                              nsIDOMNode* aRootNode,
-                                              bool aIsTrusted,
-                                              nsIXULTemplateBuilder* aBuilder,
-                                              bool* aShouldDelayBuilding,
-                                              nsISupports** aResult)
-{
-    *aResult = nullptr;
-    *aShouldDelayBuilding = false;
-
-    nsresult rv;
-    uint32_t length;
-
-    aDataSources->GetLength(&length);
-    if (length == 0)
-        return NS_OK;
-
-    // we get only the first item, because the query processor supports only
-    // one document as a datasource
-
-    nsCOMPtr<nsIDOMNode> node = do_QueryElementAt(aDataSources, 0);
-    if (node) {
-        return CallQueryInterface(node, aResult);
-    }
-
-    nsCOMPtr<nsIURI> uri = do_QueryElementAt(aDataSources, 0);
-    if (!uri)
-        return NS_ERROR_UNEXPECTED;
-
-    nsAutoCString uriStr;
-    rv = uri->GetSpec(uriStr);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    nsCOMPtr<nsIContent> root = do_QueryInterface(aRootNode);
-    if (!root)
-        return NS_ERROR_UNEXPECTED;
-
-    nsCOMPtr<nsIDocument> doc = root->GetUncomposedDoc();
-    if (!doc)
-        return NS_ERROR_UNEXPECTED;
-
-    nsIPrincipal *docPrincipal = doc->NodePrincipal();
-
-    bool hasHadScriptObject = true;
-    nsIScriptGlobalObject* scriptObject =
-      doc->GetScriptHandlingObject(hasHadScriptObject);
-    NS_ENSURE_STATE(scriptObject);
-
-    nsCOMPtr<nsIXMLHttpRequest> req =
-        do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    rv = req->Init(docPrincipal, scriptObject, nullptr, nullptr);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    rv = req->Open(NS_LITERAL_CSTRING("GET"), uriStr, true,
-                   EmptyString(), EmptyString());
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    nsCOMPtr<EventTarget> target(do_QueryInterface(req));
-    rv = target->AddEventListener(NS_LITERAL_STRING("load"), this, false);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    rv = target->AddEventListener(NS_LITERAL_STRING("error"), this, false);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    rv = req->Send(nullptr);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    mTemplateBuilder = aBuilder;
-    mRequest = req;
-
-    *aShouldDelayBuilding = true;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorXML::InitializeForBuilding(nsISupports* aDatasource,
-                                                      nsIXULTemplateBuilder* aBuilder,
-                                                      nsIDOMNode* aRootNode)
-{
-    if (mGenerationStarted)
-        return NS_ERROR_UNEXPECTED;
-
-    // the datasource is either a document or a DOM element
-    nsCOMPtr<nsIDocument> doc = do_QueryInterface(aDatasource);
-    if (doc)
-        mRoot = doc->GetDocumentElement();
-    else
-      mRoot = do_QueryInterface(aDatasource);
-    NS_ENSURE_STATE(mRoot);
-
-    mEvaluator = new XPathEvaluator();
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorXML::Done()
-{
-    mGenerationStarted = false;
-
-    mRuleToBindingsMap.Clear();
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorXML::CompileQuery(nsIXULTemplateBuilder* aBuilder,
-                                             nsIDOMNode* aQueryNode,
-                                             nsAtom* aRefVariable,
-                                             nsAtom* aMemberVariable,
-                                             nsISupports** _retval)
-{
-    *_retval = nullptr;
-
-    nsCOMPtr<nsIContent> content = do_QueryInterface(aQueryNode);
-
-    nsAutoString expr;
-    if (content->IsElement()) {
-      content->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::expr, expr);
-    }
-
-    // if an expression is not specified, then the default is to
-    // just take all of the children
-    if (expr.IsEmpty())
-        expr.Assign('*');
-
-    ErrorResult rv;
-    nsAutoPtr<XPathExpression> compiledexpr;
-    compiledexpr = CreateExpression(expr, content, rv);
-    if (rv.Failed()) {
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_BAD_XPATH);
-        return rv.StealNSResult();
-    }
-
-    RefPtr<nsXMLQuery> query =
-        new nsXMLQuery(this, aMemberVariable, Move(compiledexpr));
-
-    for (nsIContent* condition = content->GetFirstChild();
-         condition;
-         condition = condition->GetNextSibling()) {
-
-        if (condition->NodeInfo()->Equals(nsGkAtoms::assign,
-                                          kNameSpaceID_XUL)) {
-            nsAutoString var;
-            condition->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::var, var);
-
-            nsAutoString expr;
-            condition->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::expr, expr);
-
-            // ignore assignments without a variable or an expression
-            if (!var.IsEmpty() && !expr.IsEmpty()) {
-                compiledexpr = CreateExpression(expr, condition, rv);
-                if (rv.Failed()) {
-                    nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_BAD_ASSIGN_XPATH);
-                    return rv.StealNSResult();
-                }
-
-                RefPtr<nsAtom> varatom = NS_Atomize(var);
-
-                query->AddBinding(varatom, Move(compiledexpr));
-            }
-        }
-    }
-
-    query.forget(_retval);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorXML::GenerateResults(nsISupports* aDatasource,
-                                                nsIXULTemplateResult* aRef,
-                                                nsISupports* aQuery,
-                                                nsISimpleEnumerator** aResults)
-{
-    if (!aQuery)
-        return NS_ERROR_INVALID_ARG;
-
-    mGenerationStarted = true;
-
-    nsCOMPtr<nsXMLQuery> xmlquery = do_QueryInterface(aQuery);
-    if (!xmlquery)
-        return NS_ERROR_INVALID_ARG;
-
-    nsCOMPtr<nsISupports> supports;
-    nsCOMPtr<nsINode> context;
-    if (aRef)
-      aRef->GetBindingObjectFor(xmlquery->GetMemberVariable(),
-                                getter_AddRefs(supports));
-    context = do_QueryInterface(supports);
-    if (!context)
-        context = mRoot;
-
-    XPathExpression* expr = xmlquery->GetResultsExpression();
-    if (!expr)
-        return NS_ERROR_FAILURE;
-
-    ErrorResult rv;
-    RefPtr<XPathResult> exprresults =
-        expr->Evaluate(*context, XPathResult::ORDERED_NODE_SNAPSHOT_TYPE,
-                       nullptr, rv);
-    if (rv.Failed()) {
-        return rv.StealNSResult();
-    }
-
-    RefPtr<nsXULTemplateResultSetXML> results =
-        new nsXULTemplateResultSetXML(xmlquery, exprresults.forget(),
-                                      xmlquery->GetBindingSet());
-
-    results.forget(aResults);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorXML::AddBinding(nsIDOMNode* aRuleNode,
-                                           nsAtom* aVar,
-                                           nsAtom* aRef,
-                                           const nsAString& aExpr)
-{
-    if (mGenerationStarted)
-        return NS_ERROR_FAILURE;
-
-    RefPtr<nsXMLBindingSet> bindings = mRuleToBindingsMap.GetWeak(aRuleNode);
-    if (!bindings) {
-        bindings = new nsXMLBindingSet();
-        mRuleToBindingsMap.Put(aRuleNode, bindings);
-    }
-
-    nsCOMPtr<nsINode> ruleNode = do_QueryInterface(aRuleNode);
-
-    ErrorResult rv;
-    nsAutoPtr<XPathExpression> compiledexpr;
-    compiledexpr = CreateExpression(aExpr, ruleNode, rv);
-    if (rv.Failed()) {
-        rv.SuppressException();
-        nsXULContentUtils::LogTemplateError(ERROR_TEMPLATE_BAD_BINDING_XPATH);
-        return NS_OK;
-    }
-
-    // aRef isn't currently used for XML query processors
-    bindings->AddBinding(aVar, Move(compiledexpr));
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorXML::TranslateRef(nsISupports* aDatasource,
-                                             const nsAString& aRefString,
-                                             nsIXULTemplateResult** aRef)
-{
-    *aRef = nullptr;
-
-    // the datasource is either a document or a DOM element
-    nsCOMPtr<Element> rootElement;
-    nsCOMPtr<nsIDocument> doc = do_QueryInterface(aDatasource);
-    if (doc)
-        rootElement = doc->GetRootElement();
-    else
-        rootElement = do_QueryInterface(aDatasource);
-
-    // if no root element, just return. The document may not have loaded yet
-    if (!rootElement)
-        return NS_OK;
-
-    RefPtr<nsXULTemplateResultXML> result = new nsXULTemplateResultXML(nullptr, rootElement, nullptr);
-    result.forget(aRef);
-
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorXML::CompareResults(nsIXULTemplateResult* aLeft,
-                                               nsIXULTemplateResult* aRight,
-                                               nsAtom* aVar,
-                                               uint32_t aSortHints,
-                                               int32_t* aResult)
-{
-    *aResult = 0;
-    if (!aVar)
-        return NS_OK;
-
-    nsAutoString leftVal;
-    if (aLeft)
-        aLeft->GetBindingFor(aVar, leftVal);
-
-    nsAutoString rightVal;
-    if (aRight)
-        aRight->GetBindingFor(aVar, rightVal);
-
-    *aResult = XULSortServiceImpl::CompareValues(leftVal, rightVal, aSortHints);
-    return NS_OK;
-}
-
-nsXMLBindingSet*
-nsXULTemplateQueryProcessorXML::GetOptionalBindingsForRule(nsIDOMNode* aRuleNode)
-{
-    return mRuleToBindingsMap.GetWeak(aRuleNode);
-}
-
-XPathExpression*
-nsXULTemplateQueryProcessorXML::CreateExpression(const nsAString& aExpr,
-                                                 nsINode* aNode,
-                                                 ErrorResult& aRv)
-{
-    return mEvaluator->CreateExpression(aExpr, aNode, aRv);
-}
-
-NS_IMETHODIMP
-nsXULTemplateQueryProcessorXML::HandleEvent(nsIDOMEvent* aEvent)
-{
-    NS_PRECONDITION(aEvent, "aEvent null");
-    nsAutoString eventType;
-    aEvent->GetType(eventType);
-
-    if (eventType.EqualsLiteral("load") && mTemplateBuilder) {
-        NS_ASSERTION(mRequest, "request was not set");
-        nsCOMPtr<nsIDOMDocument> doc;
-        if (NS_SUCCEEDED(mRequest->GetResponseXML(getter_AddRefs(doc))))
-            mTemplateBuilder->SetDatasource(doc);
-
-        // to avoid leak. we don't need it after...
-        mTemplateBuilder = nullptr;
-        mRequest = nullptr;
-    }
-    else if (eventType.EqualsLiteral("error")) {
-        mTemplateBuilder = nullptr;
-        mRequest = nullptr;
-    }
-
-    return NS_OK;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateQueryProcessorXML.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsXULTemplateQueryProcessorXML_h__
-#define nsXULTemplateQueryProcessorXML_h__
-
-#include "nsIXULTemplateBuilder.h"
-#include "nsIXULTemplateQueryProcessor.h"
-
-#include "nsAutoPtr.h"
-#include "nsISimpleEnumerator.h"
-#include "nsString.h"
-#include "nsCOMArray.h"
-#include "nsRefPtrHashtable.h"
-#include "nsIDOMEventListener.h"
-#include "nsIDOMXPathEvaluator.h"
-#include "nsXMLBinding.h"
-#include "nsCycleCollectionParticipant.h"
-#include "nsIXMLHttpRequest.h"
-#include "mozilla/Attributes.h"
-#include "mozilla/dom/Element.h"
-#include "mozilla/dom/XPathEvaluator.h"
-#include "mozilla/dom/XPathResult.h"
-
-class nsXULTemplateQueryProcessorXML;
-
-#define NS_IXMLQUERY_IID \
-  {0x0358d692, 0xccce, 0x4a97, \
-    { 0xb2, 0x51, 0xba, 0x8f, 0x17, 0x0f, 0x3b, 0x6f }}
-
-class nsXMLQuery final : public nsISupports
-{
-  public:
-    NS_DECLARE_STATIC_IID_ACCESSOR(NS_IXMLQUERY_IID)
-
-    NS_DECL_ISUPPORTS
-
-    // return a weak reference to the processor the query was created from
-    nsXULTemplateQueryProcessorXML* Processor() { return mProcessor; }
-
-    // return a weak reference t the member variable for the query
-    nsAtom* GetMemberVariable() { return mMemberVariable; }
-
-    // return a weak reference to the expression used to generate results
-    mozilla::dom::XPathExpression* GetResultsExpression()
-      { return mResultsExpr; }
-
-    // return a weak reference to the additional required bindings
-    nsXMLBindingSet* GetBindingSet() { return mRequiredBindings; }
-
-    // add a required binding for the query
-    void
-    AddBinding(nsAtom* aVar, nsAutoPtr<mozilla::dom::XPathExpression>&& aExpr)
-    {
-        if (!mRequiredBindings) {
-            mRequiredBindings = new nsXMLBindingSet();
-        }
-
-        mRequiredBindings->AddBinding(aVar, mozilla::Move(aExpr));
-    }
-
-    nsXMLQuery(nsXULTemplateQueryProcessorXML* aProcessor,
-               nsAtom* aMemberVariable,
-               nsAutoPtr<mozilla::dom::XPathExpression>&& aResultsExpr)
-        : mProcessor(aProcessor),
-          mMemberVariable(aMemberVariable),
-          mResultsExpr(aResultsExpr)
-    { }
-
-  protected:
-    ~nsXMLQuery() {}
-
-    nsXULTemplateQueryProcessorXML* mProcessor;
-
-    RefPtr<nsAtom> mMemberVariable;
-
-    nsAutoPtr<mozilla::dom::XPathExpression> mResultsExpr;
-
-    RefPtr<nsXMLBindingSet> mRequiredBindings;
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsXMLQuery, NS_IXMLQUERY_IID)
-
-class nsXULTemplateResultSetXML final : public nsISimpleEnumerator
-{
-private:
-
-    // reference back to the query
-    nsCOMPtr<nsXMLQuery> mQuery;
-
-    // the binding set created from <assign> nodes
-    RefPtr<nsXMLBindingSet> mBindingSet;
-
-    // set of results contained in this enumerator
-    RefPtr<mozilla::dom::XPathResult> mResults;
-
-    // current position within the list of results
-    uint32_t mPosition;
-
-    ~nsXULTemplateResultSetXML() {}
-
-public:
-
-    // nsISupports interface
-    NS_DECL_ISUPPORTS
-
-    // nsISimpleEnumerator interface
-    NS_DECL_NSISIMPLEENUMERATOR
-
-    nsXULTemplateResultSetXML(nsXMLQuery* aQuery,
-                              already_AddRefed<mozilla::dom::XPathResult> aResults,
-                              nsXMLBindingSet* aBindingSet)
-        : mQuery(aQuery),
-          mBindingSet(aBindingSet),
-          mResults(aResults),
-          mPosition(0)
-    {}
-};
-
-class nsXULTemplateQueryProcessorXML final : public nsIXULTemplateQueryProcessor,
-                                             public nsIDOMEventListener
-{
-public:
-
-    nsXULTemplateQueryProcessorXML()
-        : mGenerationStarted(false)
-    {}
-
-    // nsISupports interface
-    NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-    NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsXULTemplateQueryProcessorXML,
-                                             nsIXULTemplateQueryProcessor)
-
-    // nsIXULTemplateQueryProcessor interface
-    NS_DECL_NSIXULTEMPLATEQUERYPROCESSOR
-
-    // nsIDOMEventListener interface
-    NS_DECL_NSIDOMEVENTLISTENER
-
-    nsXMLBindingSet*
-    GetOptionalBindingsForRule(nsIDOMNode* aRuleNode);
-
-    // create an XPath expression from aExpr, using aNode for
-    // resolving namespaces
-    mozilla::dom::XPathExpression*
-    CreateExpression(const nsAString& aExpr,
-                     nsINode* aNode,
-                     mozilla::ErrorResult& aRv);
-
-private:
-
-    ~nsXULTemplateQueryProcessorXML() {}
-
-    bool mGenerationStarted;
-
-    nsRefPtrHashtable<nsISupportsHashKey, nsXMLBindingSet> mRuleToBindingsMap;
-
-    nsCOMPtr<mozilla::dom::Element> mRoot;
-
-    RefPtr<mozilla::dom::XPathEvaluator> mEvaluator;
-
-    nsCOMPtr<nsIXULTemplateBuilder> mTemplateBuilder;
-
-    nsCOMPtr<nsIXMLHttpRequest> mRequest;
-};
-
-
-#endif // nsXULTemplateQueryProcessorXML_h__
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateResultRDF.cpp
+++ /dev/null
@@ -1,208 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsXULTemplateResultRDF.h"
-#include "nsXULContentUtils.h"
-
-// XXXndeakin for some reason, making this class have classinfo breaks trees.
-//#include "nsIDOMClassInfo.h"
-
-NS_IMPL_CYCLE_COLLECTION(nsXULTemplateResultRDF, mQuery)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXULTemplateResultRDF)
-  NS_INTERFACE_MAP_ENTRY(nsIXULTemplateResult)
-  NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(nsXULTemplateResultRDF)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(nsXULTemplateResultRDF)
-
-nsXULTemplateResultRDF::nsXULTemplateResultRDF(nsIRDFResource* aNode)
-    : mQuery(nullptr),
-      mNode(aNode)
-{
-}
-
-nsXULTemplateResultRDF::nsXULTemplateResultRDF(nsRDFQuery* aQuery,
-                                               const Instantiation& aInst,
-                                               nsIRDFResource *aNode)
-    : mQuery(aQuery),
-      mNode(aNode),
-      mInst(aInst)
-{
-}
-
-nsXULTemplateResultRDF::~nsXULTemplateResultRDF()
-{
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultRDF::GetIsContainer(bool* aIsContainer)
-{
-    *aIsContainer = false;
-
-    if (mNode) {
-        nsXULTemplateQueryProcessorRDF* processor = GetProcessor();
-        if (processor)
-            return processor->CheckContainer(mNode, aIsContainer);
-    }
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultRDF::GetIsEmpty(bool* aIsEmpty)
-{
-    *aIsEmpty = true;
-
-    if (mNode) {
-        nsXULTemplateQueryProcessorRDF* processor = GetProcessor();
-        if (processor)
-            return processor->CheckEmpty(mNode, aIsEmpty);
-    }
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultRDF::GetMayProcessChildren(bool* aMayProcessChildren)
-{
-    // RDF always allows recursion
-    *aMayProcessChildren = true;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultRDF::GetId(nsAString& aId)
-{
-    if (! mNode)
-        return NS_ERROR_FAILURE;
-
-    const char* uri;
-    mNode->GetValueConst(&uri);
-
-    CopyUTF8toUTF16(uri, aId);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultRDF::GetResource(nsIRDFResource** aResource)
-{
-    *aResource = mNode;
-    NS_IF_ADDREF(*aResource);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultRDF::GetType(nsAString& aType)
-{
-    aType.Truncate();
-
-    nsresult rv = NS_OK;
-
-    nsXULTemplateQueryProcessorRDF* processor = GetProcessor();
-    if (processor) {
-        bool found;
-        rv = processor->CheckIsSeparator(mNode, &found);
-        if (NS_SUCCEEDED(rv) && found)
-            aType.AssignLiteral("separator");
-    }
-
-    return rv;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultRDF::GetBindingFor(nsAtom* aVar, nsAString& aValue)
-{
-    nsCOMPtr<nsIRDFNode> val;
-    GetAssignment(aVar, getter_AddRefs(val));
-
-    return nsXULContentUtils::GetTextForNode(val, aValue);
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultRDF::GetBindingObjectFor(nsAtom* aVar, nsISupports** aValue)
-{
-    GetAssignment(aVar, (nsIRDFNode **)aValue);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultRDF::RuleMatched(nsISupports* aQuery, nsIDOMNode* aRuleNode)
-{
-    // when a rule matches, set the bindings that must be used.
-    nsXULTemplateQueryProcessorRDF* processor = GetProcessor();
-    if (processor) {
-        RDFBindingSet* bindings = processor->GetBindingsForRule(aRuleNode);
-        if (bindings) {
-            nsresult rv = mBindingValues.SetBindingSet(bindings);
-            if (NS_FAILED(rv))
-                return rv;
-
-            bindings->AddDependencies(mNode, this);
-        }
-    }
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultRDF::HasBeenRemoved()
-{
-    // when a result is no longer used, clean up the dependencies and
-    // memory elements that refer to it
-    mBindingValues.RemoveDependencies(mNode, this);
-
-    nsXULTemplateQueryProcessorRDF* processor = GetProcessor();
-    if (processor)
-        processor->RemoveMemoryElements(mInst, this);
-
-    return NS_OK;
-}
-
-
-void
-nsXULTemplateResultRDF::GetAssignment(nsAtom* aVar, nsIRDFNode** aValue)
-{
-    // look up a variable in the assignments map
-    *aValue = nullptr;
-    mInst.mAssignments.GetAssignmentFor(aVar, aValue);
-
-    // if not found, look up the variable in the bindings
-    if (! *aValue)
-        mBindingValues.GetAssignmentFor(this, aVar, aValue);
-}
-
-
-bool
-nsXULTemplateResultRDF::SyncAssignments(nsIRDFResource* aSubject,
-                                        nsIRDFResource* aPredicate,
-                                        nsIRDFNode* aTarget)
-{
-    // synchronize the bindings when an assertion is added or removed
-    RDFBindingSet* bindingset = mBindingValues.GetBindingSet();
-    if (bindingset) {
-        return bindingset->SyncAssignments(aSubject, aPredicate, aTarget,
-            (aSubject == mNode) ? mQuery->GetMemberVariable() : nullptr,
-            this, mBindingValues);
-    }
-
-    return false;
-}
-
-bool
-nsXULTemplateResultRDF::HasMemoryElement(const MemoryElement& aMemoryElement)
-{
-    MemoryElementSet::ConstIterator last = mInst.mSupport.Last();
-    for (MemoryElementSet::ConstIterator element = mInst.mSupport.First();
-                                         element != last; ++element) {
-        if ((*element).Equals(aMemoryElement))
-            return true;
-    }
-
-    return false;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateResultRDF.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsXULTemplateResultRDF_h__
-#define nsXULTemplateResultRDF_h__
-
-#include "nsCOMPtr.h"
-#include "nsIRDFResource.h"
-#include "nsXULTemplateQueryProcessorRDF.h"
-#include "nsRDFQuery.h"
-#include "nsRuleNetwork.h"
-#include "nsIXULTemplateResult.h"
-#include "nsRDFBinding.h"
-#include "mozilla/Attributes.h"
-
-/**
- * A single result of a query on an RDF graph
- */
-class nsXULTemplateResultRDF final : public nsIXULTemplateResult
-{
-public:
-    NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-    NS_DECL_CYCLE_COLLECTION_CLASS(nsXULTemplateResultRDF)
-
-    NS_DECL_NSIXULTEMPLATERESULT
-
-    explicit nsXULTemplateResultRDF(nsIRDFResource* aNode);
-
-    nsXULTemplateResultRDF(nsRDFQuery* aQuery,
-                           const Instantiation& aInst,
-                           nsIRDFResource* aNode);
-
-    nsITemplateRDFQuery* Query() { return mQuery; }
-
-    nsXULTemplateQueryProcessorRDF* GetProcessor()
-    {
-        return (mQuery ? mQuery->Processor() : nullptr);
-    }
-
-    /**
-     * Get the value of a variable, first by looking in the assignments and
-     * then the bindings
-     */
-    void
-    GetAssignment(nsAtom* aVar, nsIRDFNode** aValue);
-
-    /**
-     * Synchronize the bindings after a change in the RDF graph. Bindings that
-     * would be affected will be assigned appropriately based on the change.
-     */
-    bool
-    SyncAssignments(nsIRDFResource* aSubject,
-                    nsIRDFResource* aPredicate,
-                    nsIRDFNode* aTarget);
-
-    /**
-     * Return true if the result has an instantiation involving a particular
-     * memory element.
-     */
-    bool
-    HasMemoryElement(const MemoryElement& aMemoryElement);
-
-protected:
-    ~nsXULTemplateResultRDF();
-
-    // query that generated the result
-    nsCOMPtr<nsITemplateRDFQuery> mQuery;
-
-    // resource node
-    nsCOMPtr<nsIRDFResource> mNode;
-
-    // data computed from query
-    Instantiation mInst;
-
-    // extra assignments made by rules (<binding> tags)
-    nsBindingValues mBindingValues;
-};
-
-#endif // nsXULTemplateResultRDF_h__
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateResultSetRDF.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsXULTemplateResultSetRDF.h"
-#include "nsXULTemplateQueryProcessorRDF.h"
-
-NS_IMPL_ISUPPORTS(nsXULTemplateResultSetRDF, nsISimpleEnumerator)
-
-NS_IMETHODIMP
-nsXULTemplateResultSetRDF::HasMoreElements(bool *aResult)
-{
-    *aResult = true;
-
-    nsCOMPtr<nsIRDFNode> node;
-
-    if (! mInstantiations || ! mQuery) {
-        *aResult = false;
-        return NS_OK;
-    }
-
-    if (mCheckedNext) {
-        if (!mCurrent || mCurrent == &(mInstantiations->mHead))
-            *aResult = false;
-        return NS_OK;
-    }
-
-    mCheckedNext = true;
-
-    do {
-        if (mCurrent) {
-            mCurrent = mCurrent->mNext;
-            if (mCurrent == &(mInstantiations->mHead)) {
-                *aResult = false;
-                return NS_OK;
-            }
-        }
-        else {
-            *aResult = ! mInstantiations->Empty();
-            if (*aResult)
-                mCurrent = mInstantiations->mHead.mNext;
-        }
-
-        // get the value of the member variable. If it is not set, skip
-        // the result and move on to the next result
-        if (mCurrent) {
-            mCurrent->mInstantiation.mAssignments.
-                GetAssignmentFor(mQuery->mMemberVariable, getter_AddRefs(node));
-        }
-
-        // only resources may be used as results
-        mResource = do_QueryInterface(node);
-    } while (! mResource);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultSetRDF::GetNext(nsISupports **aResult)
-{
-    if (!aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    if (!mCurrent || !mCheckedNext)
-        return NS_ERROR_FAILURE;
-
-    RefPtr<nsXULTemplateResultRDF> nextresult =
-        new nsXULTemplateResultRDF(mQuery, mCurrent->mInstantiation, mResource);
-    if (!nextresult)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    // add the supporting memory elements to the processor's map. These are
-    // used to remove the results when an assertion is removed from the graph
-    mProcessor->AddMemoryElements(mCurrent->mInstantiation, nextresult);
-
-    mCheckedNext = false;
-
-    nextresult.forget(aResult);
-
-    return NS_OK;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateResultSetRDF.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsXULTemplateResultSetRDF_h__
-#define nsXULTemplateResultSetRDF_h__
-
-#include "nsISimpleEnumerator.h"
-#include "nsRuleNetwork.h"
-#include "nsRDFQuery.h"
-#include "nsXULTemplateResultRDF.h"
-#include "mozilla/Attributes.h"
-
-class nsXULTemplateQueryProcessorRDF;
-class nsXULTemplateResultRDF;
-
-/**
- * An enumerator used to iterate over a set of results.
- */
-class nsXULTemplateResultSetRDF final : public nsISimpleEnumerator
-{
-private:
-    nsXULTemplateQueryProcessorRDF* mProcessor;
-
-    nsRDFQuery* mQuery;
-
-    const InstantiationSet* mInstantiations;
-
-    nsCOMPtr<nsIRDFResource> mResource;
-
-    InstantiationSet::List *mCurrent;
-
-    bool mCheckedNext;
-
-    ~nsXULTemplateResultSetRDF()
-    {
-        delete mInstantiations;
-    }
-
-public:
-
-    // nsISupports interface
-    NS_DECL_ISUPPORTS
-
-    // nsISimpleEnumerator interface
-    NS_DECL_NSISIMPLEENUMERATOR
-
-    nsXULTemplateResultSetRDF(nsXULTemplateQueryProcessorRDF *aProcessor,
-                              nsRDFQuery* aQuery,
-                              const InstantiationSet* aInstantiations)
-        : mProcessor(aProcessor),
-          mQuery(aQuery),
-          mInstantiations(aInstantiations),
-          mCurrent(nullptr),
-          mCheckedNext(false)
-    { }
-};
-
-#endif // nsXULTemplateResultSetRDF_h__
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateResultStorage.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsIServiceManager.h"
-#include "nsRDFCID.h"
-#include "nsIRDFService.h"
-#include "nsString.h"
-#include "nsXULTemplateResultStorage.h"
-
-NS_IMPL_ISUPPORTS(nsXULTemplateResultStorage, nsIXULTemplateResult)
-
-nsXULTemplateResultStorage::nsXULTemplateResultStorage(nsXULTemplateResultSetStorage* aResultSet)
-{
-    static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
-    nsCOMPtr<nsIRDFService> rdfService = do_GetService(kRDFServiceCID);
-    rdfService->GetAnonymousResource(getter_AddRefs(mNode));
-    mResultSet = aResultSet;
-    if (aResultSet) {
-        mResultSet->FillColumnValues(mValues);
-    }
-}
-
-nsXULTemplateResultStorage::~nsXULTemplateResultStorage()
-{
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultStorage::GetIsContainer(bool* aIsContainer)
-{
-    *aIsContainer = false;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultStorage::GetIsEmpty(bool* aIsEmpty)
-{
-    *aIsEmpty = true;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultStorage::GetMayProcessChildren(bool* aMayProcessChildren)
-{
-    *aMayProcessChildren = false;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultStorage::GetId(nsAString& aId)
-{
-    const char* uri = nullptr;
-    mNode->GetValueConst(&uri);
-
-    aId.Assign(NS_ConvertUTF8toUTF16(uri));
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultStorage::GetResource(nsIRDFResource** aResource)
-{
-    *aResource = mNode;
-    NS_IF_ADDREF(*aResource);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultStorage::GetType(nsAString& aType)
-{
-    aType.Truncate();
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsXULTemplateResultStorage::GetBindingFor(nsAtom* aVar, nsAString& aValue)
-{
-    NS_ENSURE_ARG_POINTER(aVar);
-
-    aValue.Truncate();
-    if (!mResultSet) {
-        return NS_OK;
-    }
-
-    int32_t idx = mResultSet->GetColumnIndex(aVar);
-    if (idx < 0) {
-        return NS_OK;
-    }
-
-    nsIVariant * value = mValues[idx];
-    if (value) {
-        value->GetAsAString(aValue);
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultStorage::GetBindingObjectFor(nsAtom* aVar, nsISupports** aValue)
-{
-    NS_ENSURE_ARG_POINTER(aVar);
-
-    if (mResultSet) {
-        int32_t idx = mResultSet->GetColumnIndex(aVar);
-        if (idx >= 0) {
-            *aValue = mValues[idx];
-            NS_IF_ADDREF(*aValue);
-            return NS_OK;
-        }
-    }
-    *aValue = nullptr;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultStorage::RuleMatched(nsISupports* aQuery, nsIDOMNode* aRuleNode)
-{
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultStorage::HasBeenRemoved()
-{
-    return NS_OK;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateResultStorage.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsXULTemplateResultStorage_h__
-#define nsXULTemplateResultStorage_h__
-
-#include "nsXULTemplateQueryProcessorStorage.h"
-#include "nsIRDFResource.h"
-#include "nsIXULTemplateResult.h"
-#include "mozilla/Attributes.h"
-
-/**
- * A single result of a query from mozstorage
- */
-class nsXULTemplateResultStorage final : public nsIXULTemplateResult
-{
-public:
-    NS_DECL_ISUPPORTS
-
-    NS_DECL_NSIXULTEMPLATERESULT
-
-    explicit nsXULTemplateResultStorage(nsXULTemplateResultSetStorage* aResultSet);
-
-protected:
-
-    ~nsXULTemplateResultStorage();
-
-    RefPtr<nsXULTemplateResultSetStorage> mResultSet;
-
-    nsCOMArray<nsIVariant> mValues;
-
-    nsCOMPtr<nsIRDFResource> mNode;
-};
-
-#endif // nsXULTemplateResultStorage_h__
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateResultXML.cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsIServiceManager.h"
-#include "nsIDOMNode.h"
-#include "nsIDOMElement.h"
-#include "nsIContent.h"
-
-#include "nsIRDFService.h"
-
-#include "nsXULTemplateResultXML.h"
-#include "nsXMLBinding.h"
-
-static uint32_t sTemplateId = 0;
-
-NS_IMPL_ISUPPORTS(nsXULTemplateResultXML, nsIXULTemplateResult)
-
-nsXULTemplateResultXML::nsXULTemplateResultXML(nsXMLQuery* aQuery,
-                                               nsIContent* aNode,
-                                               nsXMLBindingSet* aBindings)
-    : mQuery(aQuery), mNode(aNode)
-{
-    // If the node has an id, create the uri from it. Otherwise, there isn't
-    // anything to identify the node with so just use a somewhat random number.
-    RefPtr<nsAtom> id = mNode->GetID();
-    if (id) {
-      nsCOMPtr<nsIURI> uri = mNode->GetBaseURI();
-      nsAutoCString spec;
-      uri->GetSpec(spec);
-
-      mId = NS_ConvertUTF8toUTF16(spec);
-
-      nsAutoString idstr;
-      id->ToString(idstr);
-      mId += NS_LITERAL_STRING("#") + idstr;
-    }
-    else {
-      nsAutoString rowid(NS_LITERAL_STRING("row"));
-      rowid.AppendInt(++sTemplateId);
-      mId.Assign(rowid);
-    }
-
-    if (aBindings)
-        mRequiredValues.SetBindingSet(aBindings);
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultXML::GetIsContainer(bool* aIsContainer)
-{
-    // a node is considered a container if it has children
-    *aIsContainer = mNode && mNode->HasChildNodes();
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultXML::GetIsEmpty(bool* aIsEmpty)
-{
-    // a node is considered empty if it has no elements as children
-    nsCOMPtr<nsIContent> content = do_QueryInterface(mNode);
-    if (content) {
-        for (nsIContent* child = content->GetFirstChild();
-             child;
-             child = child->GetNextSibling()) {
-            if (child->IsElement()) {
-                *aIsEmpty = false;
-                return NS_OK;
-            }
-        }
-    }
-
-    *aIsEmpty = true;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultXML::GetMayProcessChildren(bool* aMayProcessChildren)
-{
-    *aMayProcessChildren = true;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultXML::GetId(nsAString& aId)
-{
-    aId = mId;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultXML::GetResource(nsIRDFResource** aResource)
-{
-    *aResource = nullptr;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultXML::GetType(nsAString& aType)
-{
-    aType.Truncate();
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultXML::GetBindingFor(nsAtom* aVar, nsAString& aValue)
-{
-    NS_ENSURE_ARG_POINTER(aVar);
-
-    // get the position of the atom in the variables table
-    nsXMLBinding* binding;
-
-    int32_t idx = mRequiredValues.LookupTargetIndex(aVar, &binding);
-    if (idx >= 0) {
-        mRequiredValues.GetStringAssignmentFor(this, binding, idx, aValue);
-        return NS_OK;
-    }
-
-    idx = mOptionalValues.LookupTargetIndex(aVar, &binding);
-    if (idx >= 0) {
-        mOptionalValues.GetStringAssignmentFor(this, binding, idx, aValue);
-        return NS_OK;
-    }
-
-    // if the variable is not bound, just use the variable name as the name of
-    // an attribute to retrieve
-    nsAutoString attr;
-    aVar->ToString(attr);
-
-    if (attr.Length() > 1) {
-        nsCOMPtr<nsIDOMElement> element = do_QueryInterface(mNode);
-        if (element)
-            return element->GetAttribute(Substring(attr, 1), aValue);
-    }
-
-    aValue.Truncate();
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultXML::GetBindingObjectFor(nsAtom* aVar, nsISupports** aValue)
-{
-    NS_ENSURE_ARG_POINTER(aVar);
-
-    nsXMLBinding* binding;
-    nsCOMPtr<nsISupports> node;
-
-    if (mQuery && aVar == mQuery->GetMemberVariable()) {
-        node = mNode;
-    }
-    else {
-        int32_t idx = mRequiredValues.LookupTargetIndex(aVar, &binding);
-        if (idx > 0) {
-            node = mRequiredValues.GetNodeAssignmentFor(this, binding, idx);
-        }
-        else {
-            idx = mOptionalValues.LookupTargetIndex(aVar, &binding);
-            if (idx > 0) {
-                node = mOptionalValues.GetNodeAssignmentFor(this, binding, idx);
-            }
-        }
-    }
-
-    node.forget(aValue);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultXML::RuleMatched(nsISupports* aQueryNode,
-                                    nsIDOMNode* aRuleNode)
-{
-    // when a rule matches, set the bindings that must be used.
-    nsXULTemplateQueryProcessorXML* processor = mQuery ? mQuery->Processor() :
-                                                         nullptr;
-    if (processor) {
-        nsXMLBindingSet* bindings =
-            processor->GetOptionalBindingsForRule(aRuleNode);
-        if (bindings)
-            mOptionalValues.SetBindingSet(bindings);
-    }
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTemplateResultXML::HasBeenRemoved()
-{
-    return NS_OK;
-}
deleted file mode 100644
--- a/dom/xul/templates/nsXULTemplateResultXML.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsXULTemplateResultXML_h__
-#define nsXULTemplateResultXML_h__
-
-#include "nsCOMPtr.h"
-#include "nsIContent.h"
-#include "nsIURI.h"
-#include "nsIRDFResource.h"
-#include "nsXULTemplateQueryProcessorXML.h"
-#include "nsIXULTemplateResult.h"
-#include "mozilla/Attributes.h"
-
-/**
- * An single result of an query
- */
-class nsXULTemplateResultXML final : public nsIXULTemplateResult
-{
-public:
-    NS_DECL_ISUPPORTS
-
-    NS_DECL_NSIXULTEMPLATERESULT
-
-    nsXULTemplateResultXML(nsXMLQuery* aQuery,
-                           nsIContent* aNode,
-                           nsXMLBindingSet* aBindings);
-
-    nsIContent* Node()
-    {
-        return mNode;
-    }
-
-protected:
-
-    ~nsXULTemplateResultXML() {}
-
-    // ID used for persisting data. It is constructed using the mNode's
-    // base uri plus the node's id to form 'baseuri#id'. If the node has no
-    // id, then an id of the form 'row<some number>' is generated. In the
-    // latter case, persistence will not work as there won't be a unique id.
-    nsAutoString mId;
-
-    // query that generated the result
-    nsCOMPtr<nsXMLQuery> mQuery;
-
-    // context node in datasource
-    nsCOMPtr<nsIContent> mNode;
-
-    // assignments in query
-    nsXMLBindingValues mRequiredValues;
-
-    // extra assignments made by rules (<binding> tags)
-    nsXMLBindingValues mOptionalValues;
-};
-
-#endif // nsXULTemplateResultXML_h__
deleted file mode 100644
--- a/dom/xul/templates/nsXULTreeBuilder.cpp
+++ /dev/null
@@ -1,1906 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsXULTreeBuilder.h"
-#include "nscore.h"
-#include "nsError.h"
-#include "nsIContent.h"
-#include "mozilla/dom/NodeInfo.h"
-#include "nsIDOMElement.h"
-#include "nsIBoxObject.h"
-#include "nsITreeBoxObject.h"
-#include "nsITreeSelection.h"
-#include "nsITreeColumns.h"
-#include "nsTreeUtils.h"
-#include "nsIServiceManager.h"
-#include "nsReadableUtils.h"
-#include "nsQuickSort.h"
-#include "nsTemplateRule.h"
-#include "nsTemplateMatch.h"
-#include "nsTreeColumns.h"
-#include "nsGkAtoms.h"
-#include "nsXULContentUtils.h"
-#include "nsIXULSortService.h"
-#include "nsTArray.h"
-#include "nsUnicharUtils.h"
-#include "nsNameSpaceManager.h"
-#include "nsWhitespaceTokenizer.h"
-#include "nsTreeContentView.h"
-#include "nsIXULStore.h"
-#include "mozilla/BinarySearch.h"
-#include "mozilla/dom/DataTransfer.h"
-#include "mozilla/dom/TreeBoxObject.h"
-#include "mozilla/dom/XULTemplateBuilderBinding.h"
-
-// For security check
-#include "nsIDocument.h"
-
-NS_IMPL_ADDREF_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder)
-NS_IMPL_RELEASE_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder)
-
-NS_IMPL_CYCLE_COLLECTION_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder,
-                                   mBoxObject,
-                                   mSelection,
-                                   mPersistStateStore,
-                                   mLocalStore,
-                                   mObservers)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXULTreeBuilder)
-    NS_INTERFACE_MAP_ENTRY(nsIXULTreeBuilder)
-    NS_INTERFACE_MAP_ENTRY(nsITreeView)
-NS_INTERFACE_MAP_END_INHERITING(nsXULTemplateBuilder)
-
-
-nsXULTreeBuilder::nsXULTreeBuilder(Element* aElement)
-    : nsXULTemplateBuilder(aElement),
-      mSortDirection(eDirection_Natural), mSortHints(0)
-{
-}
-
-nsXULTreeBuilder::~nsXULTreeBuilder()
-{
-}
-
-JSObject*
-nsXULTreeBuilder::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
-    return XULTreeBuilderBinding::Wrap(aCx, this, aGivenProto);
-}
-
-void
-nsXULTreeBuilder::Uninit(bool aIsFinal)
-{
-    int32_t count = mRows.Count();
-    mRows.Clear();
-
-    if (mBoxObject) {
-        mBoxObject->BeginUpdateBatch();
-        mBoxObject->RowCountChanged(0, -count);
-        if (mBoxObject) {
-            mBoxObject->EndUpdateBatch();
-        }
-    }
-
-    nsXULTemplateBuilder::Uninit(aIsFinal);
-}
-
-
-//----------------------------------------------------------------------
-//
-// nsIXULTreeBuilder methods
-//
-
-already_AddRefed<nsIRDFResource>
-nsXULTreeBuilder::GetResourceAtIndex(int32_t aRowIndex, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRowIndex)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return nullptr;
-    }
-
-    nsCOMPtr<nsIRDFResource> result;
-    aError = GetResourceFor(aRowIndex, getter_AddRefs(result));
-    return result.forget();
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetResourceAtIndex(int32_t aRowIndex, nsIRDFResource** aResult)
-{
-    ErrorResult rv;
-    *aResult = GetResourceAtIndex(aRowIndex, rv).take();
-    return rv.StealNSResult();
-}
-
-int32_t
-nsXULTreeBuilder::GetIndexOfResource(nsIRDFResource* aResource,
-                                     ErrorResult& aError)
-{
-    nsTreeRows::iterator iter = mRows.FindByResource(aResource);
-    return iter == mRows.Last() ? -1 : iter.GetRowIndex();
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetIndexOfResource(nsIRDFResource* aResource, int32_t* aResult)
-{
-    NS_ENSURE_ARG_POINTER(aResource);
-
-    ErrorResult rv;
-    *aResult = GetIndexOfResource(aResource, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTreeBuilder::AddObserver(XULTreeBuilderObserver& aObserver)
-{
-    CallbackObjectHolder<XULTreeBuilderObserver, nsIXULTreeBuilderObserver>
-        holder(&aObserver);
-    mObservers.AppendElement(holder.ToXPCOMCallback());
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::AddObserver(nsIXULTreeBuilderObserver* aObserver)
-{
-    mObservers.AppendElement(aObserver);
-    return NS_OK;
-}
-
-void
-nsXULTreeBuilder::RemoveObserver(XULTreeBuilderObserver& aObserver)
-{
-    CallbackObjectHolder<XULTreeBuilderObserver, nsIXULTreeBuilderObserver>
-        holder(&aObserver);
-    nsCOMPtr<nsIXULTreeBuilderObserver> observer(holder.ToXPCOMCallback());
-    mObservers.RemoveElement(observer);
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::RemoveObserver(nsIXULTreeBuilderObserver* aObserver)
-{
-    mObservers.RemoveElement(aObserver);
-    return NS_OK;
-}
-
-void
-nsXULTreeBuilder::Sort(Element& aElement)
-{
-    if (aElement.AttrValueIs(kNameSpaceID_None, nsGkAtoms::sortLocked,
-                             nsGkAtoms::_true, eCaseMatters)) {
-        return;
-    }
-
-    nsAutoString sort;
-    aElement.GetAttr(kNameSpaceID_None, nsGkAtoms::sort, sort);
-
-    if (sort.IsEmpty()) {
-        return;
-    }
-
-    // Grab the new sort variable
-    mSortVariable = NS_Atomize(sort);
-
-    nsAutoString hints;
-    aElement.GetAttr(kNameSpaceID_None, nsGkAtoms::sorthints, hints);
-
-    bool hasNaturalState = true;
-    nsWhitespaceTokenizer tokenizer(hints);
-    while (tokenizer.hasMoreTokens()) {
-      const nsDependentSubstring& token(tokenizer.nextToken());
-      if (token.EqualsLiteral("comparecase"))
-        mSortHints |= nsIXULSortService::SORT_COMPARECASE;
-      else if (token.EqualsLiteral("integer"))
-        mSortHints |= nsIXULSortService::SORT_INTEGER;
-      else if (token.EqualsLiteral("twostate"))
-        hasNaturalState = false;
-    }
-
-    // Cycle the sort direction
-    nsAutoString dir;
-    aElement.GetAttr(kNameSpaceID_None, nsGkAtoms::sortDirection, dir);
-
-    if (dir.EqualsLiteral("ascending")) {
-        dir.AssignLiteral("descending");
-        mSortDirection = eDirection_Descending;
-    }
-    else if (hasNaturalState && dir.EqualsLiteral("descending")) {
-        dir.AssignLiteral("natural");
-        mSortDirection = eDirection_Natural;
-    }
-    else {
-        dir.AssignLiteral("ascending");
-        mSortDirection = eDirection_Ascending;
-    }
-
-    // Sort it.
-    SortSubtree(mRows.GetRoot());
-    mRows.InvalidateCachedRow();
-    if (mBoxObject)
-        mBoxObject->Invalidate();
-
-    nsTreeUtils::UpdateSortIndicators(&aElement, dir);
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::Sort(nsIDOMElement* aElement)
-{
-    nsCOMPtr<Element> header = do_QueryInterface(aElement);
-    if (!header) {
-        return NS_ERROR_FAILURE;
-    }
-    Sort(*header);
-    return NS_OK;
-}
-
-//----------------------------------------------------------------------
-//
-// nsITreeView methods
-//
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetRowCount(int32_t* aRowCount)
-{
-    *aRowCount = RowCount();
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetSelection(nsITreeSelection** aSelection)
-{
-    NS_IF_ADDREF(*aSelection = GetSelection());
-    return NS_OK;
-}
-
-void
-nsXULTreeBuilder::SetSelection(nsITreeSelection* aSelection,
-                               ErrorResult& aError)
-{
-    if (aSelection && !nsTreeContentView::CanTrustTreeSelection(aSelection)) {
-        aError.Throw(NS_ERROR_DOM_SECURITY_ERR);
-        return;
-    }
-
-    mSelection = aSelection;
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::SetSelection(nsITreeSelection* aSelection)
-{
-    ErrorResult rv;
-    SetSelection(aSelection, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTreeBuilder::GetRowProperties(int32_t aRow, nsAString& aProperties,
-                                   ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return;
-    }
-
-    nsCOMPtr<Element> row;
-    GetTemplateActionRowFor(aRow, getter_AddRefs(row));
-    if (row) {
-        nsAutoString raw;
-        row->GetAttr(kNameSpaceID_None, nsGkAtoms::properties, raw);
-
-        if (!raw.IsEmpty()) {
-            SubstituteText(mRows[aRow]->mMatch->mResult, raw, aProperties);
-        }
-    }
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetRowProperties(int32_t aIndex, nsAString& aProps)
-{
-    ErrorResult rv;
-    GetRowProperties(aIndex, aProps, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTreeBuilder::GetCellProperties(int32_t aRow, nsTreeColumn& aColumn,
-                                    nsAString& aProperties, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return;
-    }
-
-    Element* cell = GetTemplateActionCellFor(aRow, aColumn);
-    if (cell) {
-        nsAutoString raw;
-        cell->GetAttr(kNameSpaceID_None, nsGkAtoms::properties, raw);
-
-        if (!raw.IsEmpty()) {
-            SubstituteText(mRows[aRow]->mMatch->mResult, raw, aProperties);
-        }
-    }
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetCellProperties(int32_t aRow, nsITreeColumn* aCol,
-                                    nsAString& aProps)
-{
-    RefPtr<nsTreeColumn> col = nsTreeColumn::From(aCol);
-    NS_ENSURE_ARG(col);
-
-    ErrorResult rv;
-    GetCellProperties(aRow, *col, aProps, rv);
-    return rv.StealNSResult();
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetColumnProperties(nsITreeColumn* aCol, nsAString& aProps)
-{
-    NS_ENSURE_ARG_POINTER(aCol);
-    // XXX sortactive fu
-    return NS_OK;
-}
-
-bool
-nsXULTreeBuilder::IsContainer(int32_t aRow, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return false;
-    }
-
-    nsTreeRows::iterator iter = mRows[aRow];
-
-    bool isContainer;
-    iter->mMatch->mResult->GetIsContainer(&isContainer);
-
-    iter->mContainerType = isContainer
-        ? nsTreeRows::eContainerType_Container
-        : nsTreeRows::eContainerType_Noncontainer;
-
-    return iter->mContainerType == nsTreeRows::eContainerType_Container;
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::IsContainer(int32_t aIndex, bool* aResult)
-{
-    ErrorResult rv;
-    *aResult = IsContainer(aIndex, rv);
-    return rv.StealNSResult();
-}
-
-bool
-nsXULTreeBuilder::IsContainerOpen(int32_t aRow, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return false;
-    }
-
-    nsTreeRows::iterator iter = mRows[aRow];
-
-    if (iter->mContainerState == nsTreeRows::eContainerState_Unknown) {
-        bool isOpen = IsContainerOpen(iter->mMatch->mResult);
-
-        iter->mContainerState = isOpen
-            ? nsTreeRows::eContainerState_Open
-            : nsTreeRows::eContainerState_Closed;
-    }
-
-    return iter->mContainerState == nsTreeRows::eContainerState_Open;
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::IsContainerOpen(int32_t aIndex, bool* aOpen)
-{
-    ErrorResult rv;
-    *aOpen = IsContainerOpen(aIndex, rv);
-    return rv.StealNSResult();
-}
-
-bool
-nsXULTreeBuilder::IsContainerEmpty(int32_t aRow, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return false;
-    }
-
-    nsTreeRows::iterator iter = mRows[aRow];
-    NS_ASSERTION(iter->mContainerType == nsTreeRows::eContainerType_Container,
-                 "asking for empty state on non-container");
-
-    // if recursion is disabled, pretend that the container is empty. This
-    // ensures that folders are still displayed as such, yet won't display
-    // their children
-    if ((mFlags & eDontRecurse) && (iter->mMatch->mResult != mRootResult)) {
-        return true;
-    }
-
-    if (iter->mContainerFill == nsTreeRows::eContainerFill_Unknown) {
-        bool isEmpty;
-        iter->mMatch->mResult->GetIsEmpty(&isEmpty);
-
-        iter->mContainerFill = isEmpty
-            ? nsTreeRows::eContainerFill_Empty
-            : nsTreeRows::eContainerFill_Nonempty;
-    }
-
-    return iter->mContainerFill == nsTreeRows::eContainerFill_Empty;
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::IsContainerEmpty(int32_t aIndex, bool* aResult)
-{
-    ErrorResult rv;
-    *aResult = IsContainerEmpty(aIndex, rv);
-    return rv.StealNSResult();
-}
-
-bool
-nsXULTreeBuilder::IsSeparator(int32_t aRow, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return false;
-    }
-
-    nsAutoString type;
-    nsTreeRows::Row& row = *(mRows[aRow]);
-    row.mMatch->mResult->GetType(type);
-
-    return type.EqualsLiteral("separator");
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::IsSeparator(int32_t aIndex, bool* aResult)
-{
-    ErrorResult rv;
-    *aResult = IsSeparator(aIndex, rv);
-    return rv.StealNSResult();
-}
-
-int32_t
-nsXULTreeBuilder::GetParentIndex(int32_t aRow, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return -1;
-    }
-
-    // Construct a path to the row
-    nsTreeRows::iterator iter = mRows[aRow];
-
-    // The parent of the row will be at the top of the path
-    nsTreeRows::Subtree* parent = iter.GetParent();
-
-    // Now walk through our previous siblings, subtracting off each
-    // one's subtree size
-    int32_t index = iter.GetChildIndex();
-    while (--index >= 0)
-        aRow -= mRows.GetSubtreeSizeFor(parent, index) + 1;
-
-    // Now the parent's index will be the first row's index, less one.
-    return aRow - 1;
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetParentIndex(int32_t aRowIndex, int32_t* aResult)
-{
-    ErrorResult rv;
-    *aResult = GetParentIndex(aRowIndex, rv);
-    return rv.StealNSResult();
-}
-
-bool
-nsXULTreeBuilder::HasNextSibling(int32_t aRow, int32_t aAfterIndex,
-                                 ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return false;
-    }
-
-    // Construct a path to the row
-    nsTreeRows::iterator iter = mRows[aRow];
-
-    // The parent of the row will be at the top of the path
-    nsTreeRows::Subtree* parent = iter.GetParent();
-
-    // We have a next sibling if the child is not the last in the
-    // subtree.
-    return iter.GetChildIndex() != parent->Count() - 1;
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::HasNextSibling(int32_t aRowIndex, int32_t aAfterIndex, bool* aResult)
-{
-    ErrorResult rv;
-    *aResult = HasNextSibling(aRowIndex, aAfterIndex, rv);
-    return rv.StealNSResult();
-}
-
-int32_t
-nsXULTreeBuilder::GetLevel(int32_t aRow, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return -1;
-    }
-
-    // Construct a path to the row; the ``level'' is the path length
-    // less one.
-    nsTreeRows::iterator iter = mRows[aRow];
-    return iter.GetDepth() - 1;
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetLevel(int32_t aRowIndex, int32_t* aResult)
-{
-    ErrorResult rv;
-    *aResult = GetLevel(aRowIndex, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTreeBuilder::GetImageSrc(int32_t aRow, nsTreeColumn& aColumn,
-                              nsAString& aSrc, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return;
-    }
-
-    // Find the <cell> that corresponds to the column we want.
-    Element* cell = GetTemplateActionCellFor(aRow, aColumn);
-    if (cell) {
-        nsAutoString raw;
-        cell->GetAttr(kNameSpaceID_None, nsGkAtoms::src, raw);
-
-        SubstituteText(mRows[aRow]->mMatch->mResult, raw, aSrc);
-    } else {
-        aSrc.Truncate();
-    }
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetImageSrc(int32_t aRow, nsITreeColumn* aCol, nsAString& aResult)
-{
-    RefPtr<nsTreeColumn> col = nsTreeColumn::From(aCol);
-    NS_ENSURE_ARG(col);
-
-    ErrorResult rv;
-    GetImageSrc(aRow, *col, aResult, rv);
-    return rv.StealNSResult();
-}
-
-int32_t
-nsXULTreeBuilder::GetProgressMode(int32_t aRow, nsTreeColumn& aColumn,
-                                  ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return -1;
-    }
-
-    // Find the <cell> that corresponds to the column we want.
-    Element* cell = GetTemplateActionCellFor(aRow, aColumn);
-    if (cell) {
-        nsAutoString raw;
-        cell->GetAttr(kNameSpaceID_None, nsGkAtoms::mode, raw);
-
-        nsAutoString mode;
-        SubstituteText(mRows[aRow]->mMatch->mResult, raw, mode);
-
-        if (mode.EqualsLiteral("normal")) {
-            return nsITreeView::PROGRESS_NORMAL;
-        }
-
-        if (mode.EqualsLiteral("undetermined")) {
-            return nsITreeView::PROGRESS_UNDETERMINED;
-        }
-    }
-
-    return nsITreeView::PROGRESS_NONE;
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetProgressMode(int32_t aRow, nsITreeColumn* aCol, int32_t* aResult)
-{
-    RefPtr<nsTreeColumn> col = nsTreeColumn::From(aCol);
-    NS_ENSURE_ARG(col);
-
-    ErrorResult rv;
-    *aResult = GetProgressMode(aRow, *col, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTreeBuilder::GetCellValue(int32_t aRow, nsTreeColumn& aColumn,
-                               nsAString& aValue, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return;
-    }
-
-    // Find the <cell> that corresponds to the column we want.
-    Element* cell = GetTemplateActionCellFor(aRow, aColumn);
-    if (cell) {
-        nsAutoString raw;
-        cell->GetAttr(kNameSpaceID_None, nsGkAtoms::value, raw);
-
-        SubstituteText(mRows[aRow]->mMatch->mResult, raw, aValue);
-    } else {
-        aValue.Truncate();
-    }
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetCellValue(int32_t aRow, nsITreeColumn* aCol, nsAString& aResult)
-{
-    RefPtr<nsTreeColumn> col = nsTreeColumn::From(aCol);
-    NS_ENSURE_ARG(col);
-
-    ErrorResult rv;
-    GetCellValue(aRow, *col, aResult, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTreeBuilder::GetCellText(int32_t aRow, nsTreeColumn& aColumn,
-                              nsAString& aText, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return;
-    }
-
-    // Find the <cell> that corresponds to the column we want.
-    Element* cell = GetTemplateActionCellFor(aRow, aColumn);
-    if (cell) {
-        nsAutoString raw;
-        cell->GetAttr(kNameSpaceID_None, nsGkAtoms::label, raw);
-
-        SubstituteText(mRows[aRow]->mMatch->mResult, raw, aText);
-    } else {
-        aText.Truncate();
-    }
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::GetCellText(int32_t aRow, nsITreeColumn* aCol, nsAString& aResult)
-{
-    RefPtr<nsTreeColumn> col = nsTreeColumn::From(aCol);
-    NS_ENSURE_ARG(col);
-
-    ErrorResult rv;
-    GetCellText(aRow, *col, aResult, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTreeBuilder::SetTree(TreeBoxObject* aTree, ErrorResult& aError)
-{
-    aError = SetTree(aTree);
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::SetTree(nsITreeBoxObject* aTree)
-{
-    mBoxObject = aTree;
-
-    // If this is teardown time, then we're done.
-    if (!mBoxObject) {
-        Uninit(false);
-        return NS_OK;
-    }
-    NS_ENSURE_TRUE(mRoot, NS_ERROR_NOT_INITIALIZED);
-
-    // Only use the XUL store if the root's principal is trusted.
-    if (mRoot->NodePrincipal()->GetIsSystemPrincipal()) {
-        mLocalStore = do_GetService("@mozilla.org/xul/xulstore;1");
-        if (NS_WARN_IF(!mLocalStore)) {
-            return NS_ERROR_NOT_INITIALIZED;
-        }
-    }
-
-    Rebuild();
-
-    EnsureSortVariables();
-    if (mSortVariable)
-        SortSubtree(mRows.GetRoot());
-
-    return NS_OK;
-}
-
-void
-nsXULTreeBuilder::ToggleOpenState(int32_t aRow, ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return;
-    }
-
-    nsIXULTemplateResult* result = mRows[aRow]->mMatch->mResult;
-    if (!result) {
-        aError.Throw(NS_ERROR_FAILURE);
-        return;
-    }
-
-    if (mFlags & eDontRecurse) {
-        return;
-    }
-
-    if (result && result != mRootResult) {
-        // don't open containers if child processing isn't allowed
-        bool mayProcessChildren;
-        aError = result->GetMayProcessChildren(&mayProcessChildren);
-        if (aError.Failed() || !mayProcessChildren) {
-            return;
-        }
-    }
-
-    uint32_t count = mObservers.Length();
-    for (uint32_t i = 0; i < count; ++i) {
-        nsCOMPtr<nsIXULTreeBuilderObserver> observer = mObservers.SafeElementAt(i);
-        if (observer)
-            observer->OnToggleOpenState(aRow);
-    }
-
-    if (mLocalStore && mRoot) {
-        bool isOpen;
-        IsContainerOpen(aRow, &isOpen);
-
-        nsIDocument* doc = mRoot->GetComposedDoc();
-        if (!doc) {
-            aError.Throw(NS_ERROR_FAILURE);
-            return;
-        }
-
-        nsIURI* docURI = doc->GetDocumentURI();
-        nsTreeRows::Row& row = *(mRows[aRow]);
-        nsAutoString nodeid;
-        aError = row.mMatch->mResult->GetId(nodeid);
-        if (aError.Failed()) {
-            return;
-        }
-
-        nsAutoCString utf8uri;
-        aError = docURI->GetSpec(utf8uri);
-        if (NS_WARN_IF(aError.Failed())) {
-            return;
-        }
-        NS_ConvertUTF8toUTF16 uri(utf8uri);
-
-        if (isOpen) {
-            mLocalStore->RemoveValue(uri, nodeid, NS_LITERAL_STRING("open"));
-            CloseContainer(aRow);
-        } else {
-            mLocalStore->SetValue(uri, nodeid, NS_LITERAL_STRING("open"),
-                NS_LITERAL_STRING("true"));
-
-            OpenContainer(aRow, result);
-        }
-    }
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::ToggleOpenState(int32_t aIndex)
-{
-    ErrorResult rv;
-    ToggleOpenState(aIndex, rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTreeBuilder::CycleHeader(nsTreeColumn& aColumn, ErrorResult& aError)
-{
-    nsCOMPtr<nsIDOMElement> element;
-    aColumn.GetElement(getter_AddRefs(element));
-
-    nsAutoString id;
-    aColumn.GetId(id);
-
-    uint32_t count = mObservers.Length();
-    for (uint32_t i = 0; i < count; ++i) {
-        nsCOMPtr<nsIXULTreeBuilderObserver> observer = mObservers.SafeElementAt(i);
-        if (observer)
-            observer->OnCycleHeader(id.get(), element);
-    }
-
-    aError = Sort(element);
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::CycleHeader(nsITreeColumn* aCol)
-{
-    RefPtr<nsTreeColumn> col = nsTreeColumn::From(aCol);
-    NS_ENSURE_ARG(col);
-
-    ErrorResult rv;
-    CycleHeader(*col, rv);
-    return rv.StealNSResult();
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::SelectionChanged()
-{
-    uint32_t count = mObservers.Length();
-    for (uint32_t i = 0; i < count; ++i) {
-        nsCOMPtr<nsIXULTreeBuilderObserver> observer = mObservers.SafeElementAt(i);
-        if (observer)
-            observer->OnSelectionChanged();
-    }
-
-    return NS_OK;
-}
-
-void
-nsXULTreeBuilder::CycleCell(int32_t aRow, nsTreeColumn& aColumn)
-{
-    nsAutoString id;
-    aColumn.GetId(id);
-
-    uint32_t count = mObservers.Length();
-    for (uint32_t i = 0; i < count; ++i) {
-        nsCOMPtr<nsIXULTreeBuilderObserver> observer = mObservers.SafeElementAt(i);
-        if (observer)
-            observer->OnCycleCell(aRow, id.get());
-    }
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::CycleCell(int32_t aRow, nsITreeColumn* aCol)
-{
-    RefPtr<nsTreeColumn> col = nsTreeColumn::From(aCol);
-    NS_ENSURE_ARG(col);
-
-    CycleCell(aRow, *col);
-    return NS_OK;
-}
-
-bool
-nsXULTreeBuilder::IsEditable(int32_t aRow, nsTreeColumn& aColumn,
-                             ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return false;
-    }
-
-    // Find the <cell> that corresponds to the column we want.
-    Element* cell = GetTemplateActionCellFor(aRow, aColumn);
-    if (!cell) {
-        return true;
-    }
-
-    nsAutoString raw;
-    cell->GetAttr(kNameSpaceID_None, nsGkAtoms::editable, raw);
-
-    nsAutoString editable;
-    SubstituteText(mRows[aRow]->mMatch->mResult, raw, editable);
-
-    return !editable.EqualsLiteral("false");
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::IsEditable(int32_t aRow, nsITreeColumn* aCol, bool* _retval)
-{
-    RefPtr<nsTreeColumn> col = nsTreeColumn::From(aCol);
-    NS_ENSURE_ARG(col);
-
-    ErrorResult rv;
-    *_retval = IsEditable(aRow, *col, rv);
-    return rv.StealNSResult();
-}
-
-bool
-nsXULTreeBuilder::IsSelectable(int32_t aRow, nsTreeColumn& aColumn,
-                               ErrorResult& aError)
-{
-    if (!IsValidRowIndex(aRow)) {
-        aError.Throw(NS_ERROR_INVALID_ARG);
-        return false;
-    }
-
-    // Find the <cell> that corresponds to the column we want.
-    Element* cell = GetTemplateActionCellFor(aRow, aColumn);
-    if (!cell) {
-        return true;
-    }
-
-    nsAutoString raw;
-    cell->GetAttr(kNameSpaceID_None, nsGkAtoms::selectable, raw);
-
-    nsAutoString selectable;
-    SubstituteText(mRows[aRow]->mMatch->mResult, raw, selectable);
-
-    return !selectable.EqualsLiteral("false");
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::IsSelectable(int32_t aRow, nsITreeColumn* aCol, bool* _retval)
-{
-    RefPtr<nsTreeColumn> col = nsTreeColumn::From(aCol);
-    NS_ENSURE_ARG(col);
-
-    ErrorResult rv;
-    *_retval = IsSelectable(aRow, *col, rv);
-    return rv.StealNSResult();
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::SetCellValue(int32_t aRow, nsITreeColumn* aCol, const nsAString& aValue)
-{
-    NS_ENSURE_ARG_POINTER(aCol);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::SetCellText(int32_t aRow, nsITreeColumn* aCol, const nsAString& aValue)
-{
-    NS_ENSURE_ARG_POINTER(aCol);
-    return NS_OK;
-}
-
-void
-nsXULTreeBuilder::PerformAction(const nsAString& aAction)
-{
-    uint32_t count = mObservers.Length();
-    for (uint32_t i = 0; i < count; ++i) {
-        nsCOMPtr<nsIXULTreeBuilderObserver> observer = mObservers.SafeElementAt(i);
-        if (observer) {
-            observer->OnPerformAction(PromiseFlatString(aAction).get());
-        }
-    }
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::PerformAction(const char16_t* aAction)
-{
-    PerformAction(aAction ? nsDependentString(aAction) : EmptyString());
-
-    return NS_OK;
-}
-
-void
-nsXULTreeBuilder::PerformActionOnRow(const nsAString& aAction, int32_t aRow)
-{
-    uint32_t count = mObservers.Length();
-    for (uint32_t i = 0; i < count; ++i) {
-        nsCOMPtr<nsIXULTreeBuilderObserver> observer = mObservers.SafeElementAt(i);
-        if (observer) {
-            observer->OnPerformActionOnRow(PromiseFlatString(aAction).get(), aRow);
-        }
-    }
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::PerformActionOnRow(const char16_t* aAction, int32_t aRow)
-{
-    PerformActionOnRow(aAction ? nsDependentString(aAction) : EmptyString(), aRow);
-
-    return NS_OK;
-}
-
-void
-nsXULTreeBuilder::PerformActionOnCell(const nsAString& aAction, int32_t aRow,
-                                      nsTreeColumn& aColumn)
-{
-    nsAutoString id;
-    aColumn.GetId(id);
-
-    uint32_t count = mObservers.Length();
-    for (uint32_t i = 0; i < count; ++i) {
-        nsCOMPtr<nsIXULTreeBuilderObserver> observer = mObservers.SafeElementAt(i);
-        if (observer) {
-            observer->OnPerformActionOnCell(PromiseFlatString(aAction).get(), aRow, id.get());
-        }
-    }
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::PerformActionOnCell(const char16_t* aAction, int32_t aRow, nsITreeColumn* aCol)
-{
-    RefPtr<nsTreeColumn> col = nsTreeColumn::From(aCol);
-    NS_ENSURE_ARG(col);
-
-    PerformActionOnCell(aAction ? nsDependentString(aAction) : EmptyString(), aRow, *col);
-
-    return NS_OK;
-}
-
-
-void
-nsXULTreeBuilder::NodeWillBeDestroyed(const nsINode* aNode)
-{
-    nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
-    mObservers.Clear();
-
-    nsXULTemplateBuilder::NodeWillBeDestroyed(aNode);
-}
-
-bool
-nsXULTreeBuilder::HasGeneratedContent(nsIRDFResource* aResource,
-                                      const nsAString& aTag,
-                                      ErrorResult& aError)
-{
-    if (!aResource) {
-        aError.Throw(NS_ERROR_INVALID_POINTER);
-        return false;
-    }
-
-    if (!mRootResult) {
-        return false;
-    }
-
-    nsCOMPtr<nsIRDFResource> rootresource;
-    aError = mRootResult->GetResource(getter_AddRefs(rootresource));
-    if (aError.Failed()) {
-        return false;
-    }
-
-    return aResource == rootresource ||
-           mRows.FindByResource(aResource) != mRows.Last();
-}
-
-bool
-nsXULTreeBuilder::GetInsertionLocations(nsIXULTemplateResult* aResult,
-                                        nsCOMArray<Element>** aLocations)
-{
-    *aLocations = nullptr;
-
-    // Get the reference point and check if it is an open container. Rows
-    // should not be generated otherwise.
-
-    nsAutoString ref;
-    nsresult rv = aResult->GetBindingFor(mRefVariable, ref);
-    if (NS_FAILED(rv) || ref.IsEmpty())
-        return false;
-
-    nsCOMPtr<nsIRDFResource> container;
-    rv = gRDFService->GetUnicodeResource(ref, getter_AddRefs(container));
-    if (NS_FAILED(rv))
-        return false;
-
-    // Can always insert into the root resource
-    if (container == mRows.GetRootResource())
-        return true;
-
-    nsTreeRows::iterator iter = mRows.FindByResource(container);
-    if (iter == mRows.Last())
-        return false;
-
-    return (iter->mContainerState == nsTreeRows::eContainerState_Open);
-}
-
-struct ResultComparator
-{
-    nsXULTreeBuilder* const mTreebuilder;
-    nsIXULTemplateResult* const mResult;
-    ResultComparator(nsXULTreeBuilder* aTreebuilder, nsIXULTemplateResult* aResult)
-      : mTreebuilder(aTreebuilder), mResult(aResult) {}
-    int operator()(const nsTreeRows::Row& aSubtree) const {
-        return mTreebuilder->CompareResults(mResult, aSubtree.mMatch->mResult);
-    }
-};
-
-nsresult
-nsXULTreeBuilder::ReplaceMatch(nsIXULTemplateResult* aOldResult,
-                               nsTemplateMatch* aNewMatch,
-                               nsTemplateRule* aNewMatchRule,
-                               Element*)
-{
-    if (! mBoxObject)
-        return NS_OK;
-
-    if (aOldResult) {
-        // Grovel through the rows looking for oldresult.
-        nsTreeRows::iterator iter = mRows.Find(aOldResult);
-
-        NS_ASSERTION(iter != mRows.Last(), "couldn't find row");
-        if (iter == mRows.Last())
-            return NS_ERROR_FAILURE;
-
-        // Remove the rows from the view
-        int32_t row = iter.GetRowIndex();
-
-        // If the row contains children, remove the matches from the
-        // children so that they can be regenerated again if the element
-        // gets added back.
-        int32_t delta = mRows.GetSubtreeSizeFor(iter);
-        if (delta)
-            RemoveMatchesFor(*(iter->mSubtree));
-
-        if (mRows.RemoveRowAt(iter) == 0 && iter.GetRowIndex() >= 0) {
-
-            // In this case iter now points to its parent
-            // Invalidate the row's cached fill state
-            iter->mContainerFill = nsTreeRows::eContainerFill_Unknown;
-
-            nsCOMPtr<nsITreeColumns> cols;
-            mBoxObject->GetColumns(getter_AddRefs(cols));
-            if (cols) {
-                nsCOMPtr<nsITreeColumn> primaryCol;
-                cols->GetPrimaryColumn(getter_AddRefs(primaryCol));
-                if (primaryCol)
-                    mBoxObject->InvalidateCell(iter.GetRowIndex(), primaryCol);
-            }
-        }
-
-        // Notify the box object
-        mBoxObject->RowCountChanged(row, -delta - 1);
-    }
-
-    if (aNewMatch && aNewMatch->mResult) {
-        // Insertion.
-        int32_t row = -1;
-        nsTreeRows::Subtree* parent = nullptr;
-        nsIXULTemplateResult* result = aNewMatch->mResult;
-
-        nsAutoString ref;
-        nsresult rv = result->GetBindingFor(mRefVariable, ref);
-        if (NS_FAILED(rv) || ref.IsEmpty())
-            return rv;
-
-        nsCOMPtr<nsIRDFResource> container;
-        rv = gRDFService->GetUnicodeResource(ref, getter_AddRefs(container));
-        if (NS_FAILED(rv))
-            return rv;
-
-        if (container != mRows.GetRootResource()) {
-            nsTreeRows::iterator iter = mRows.FindByResource(container);
-            row = iter.GetRowIndex();
-
-            NS_ASSERTION(iter != mRows.Last(), "couldn't find container row");
-            if (iter == mRows.Last())
-                return NS_ERROR_FAILURE;
-
-            // Use the persist store to remember if the container
-            // is open or closed.
-            bool open = false;
-            IsContainerOpen(row, &open);
-
-            // If it's open, make sure that we've got a subtree structure ready.
-            if (open)
-                parent = mRows.EnsureSubtreeFor(iter);
-
-            // We know something has just been inserted into the
-            // container, so whether its open or closed, make sure
-            // that we've got our tree row's state correct.
-            if ((iter->mContainerType != nsTreeRows::eContainerType_Container) ||
-                (iter->mContainerFill != nsTreeRows::eContainerFill_Nonempty)) {
-                iter->mContainerType  = nsTreeRows::eContainerType_Container;
-                iter->mContainerFill = nsTreeRows::eContainerFill_Nonempty;
-                mBoxObject->InvalidateRow(iter.GetRowIndex());
-            }
-        }
-        else {
-            parent = mRows.GetRoot();
-        }
-
-        if (parent) {
-            // If we get here, then we're inserting into an open
-            // container. By default, place the new element at the
-            // end of the container
-            size_t index = parent->Count();
-
-            if (mSortVariable) {
-                // Figure out where to put the new element through
-                // binary search.
-                mozilla::BinarySearchIf(*parent, 0, parent->Count(),
-                                        ResultComparator(this, result), &index);
-            }
-
-            nsTreeRows::iterator iter =
-                mRows.InsertRowAt(aNewMatch, parent, index);
-
-            mBoxObject->RowCountChanged(iter.GetRowIndex(), +1);
-
-            // See if this newly added row is open; in which case,
-            // recursively add its children to the tree, too.
-
-            if (mFlags & eDontRecurse)
-                return NS_OK;
-
-            if (result != mRootResult) {
-                // don't open containers if child processing isn't allowed
-                bool mayProcessChildren;
-                nsresult rv = result->GetMayProcessChildren(&mayProcessChildren);
-                if (NS_FAILED(rv) || ! mayProcessChildren) return NS_OK;
-            }
-
-            if (IsContainerOpen(result)) {
-                OpenContainer(iter.GetRowIndex(), result);
-            }
-        }
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTreeBuilder::SynchronizeResult(nsIXULTemplateResult* aResult)
-{
-    if (mBoxObject) {
-        // XXX we could be more conservative and just invalidate the cells
-        // that got whacked...
-
-        nsTreeRows::iterator iter = mRows.Find(aResult);
-
-        NS_ASSERTION(iter != mRows.Last(), "couldn't find row");
-        if (iter == mRows.Last())
-            return NS_ERROR_FAILURE;
-
-        int32_t row = iter.GetRowIndex();
-        if (row >= 0)
-            mBoxObject->InvalidateRow(row);
-
-        MOZ_LOG(gXULTemplateLog, LogLevel::Debug,
-               ("xultemplate[%p]   => row %d", this, row));
-    }
-
-    return NS_OK;
-}
-
-//----------------------------------------------------------------------
-
-nsresult
-nsXULTreeBuilder::EnsureSortVariables()
-{
-    // Grovel through <treecols> kids to find the <treecol>
-    // with the sort attributes.
-    nsCOMPtr<Element> treecols;
-
-    nsXULContentUtils::FindChildByTag(mRoot, kNameSpaceID_XUL,
-                                      nsGkAtoms::treecols,
-                                      getter_AddRefs(treecols));
-
-    if (!treecols)
-        return NS_OK;
-
-    for (nsIContent* child = treecols->GetFirstChild();
-         child;
-         child = child->GetNextSibling()) {
-
-        if (child->NodeInfo()->Equals(nsGkAtoms::treecol,
-                                      kNameSpaceID_XUL)) {
-            if (child->AsElement()->AttrValueIs(kNameSpaceID_None,
-                                                nsGkAtoms::sortActive,
-                                                nsGkAtoms::_true, eCaseMatters)) {
-                nsAutoString sort;
-                child->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::sort, sort);
-                if (! sort.IsEmpty()) {
-                    mSortVariable = NS_Atomize(sort);
-
-                    static Element::AttrValuesArray strings[] =
-                      {&nsGkAtoms::ascending, &nsGkAtoms::descending, nullptr};
-                    switch (child->AsElement()->FindAttrValueIn(kNameSpaceID_None,
-                                                                nsGkAtoms::sortDirection,
-                                                                strings, eCaseMatters)) {
-                       case 0: mSortDirection = eDirection_Ascending; break;
-                       case 1: mSortDirection = eDirection_Descending; break;
-                       default: mSortDirection = eDirection_Natural; break;
-                    }
-                }
-                break;
-            }
-        }
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTreeBuilder::RebuildAll()
-{
-    NS_ENSURE_TRUE(mRoot, NS_ERROR_NOT_INITIALIZED);
-
-    nsCOMPtr<nsIDocument> doc = mRoot->GetComposedDoc();
-
-    // Bail out early if we are being torn down.
-    if (!doc)
-        return NS_OK;
-
-    if (! mQueryProcessor)
-        return NS_OK;
-
-    if (mBoxObject) {
-        mBoxObject->BeginUpdateBatch();
-    }
-
-    if (mQueriesCompiled) {
-        Uninit(false);
-    }
-    else if (mBoxObject) {
-        int32_t count = mRows.Count();
-        mRows.Clear();
-        mBoxObject->RowCountChanged(0, -count);
-    }
-
-    nsresult rv = CompileQueries();
-    if (NS_SUCCEEDED(rv) && mQuerySets.Length() > 0) {
-        // Seed the rule network with assignments for the tree row variable
-        nsAutoString ref;
-        mRoot->GetAttr(kNameSpaceID_None, nsGkAtoms::ref, ref);
-        if (!ref.IsEmpty()) {
-            rv = mQueryProcessor->TranslateRef(mDataSource, ref,
-                                               getter_AddRefs(mRootResult));
-            if (NS_SUCCEEDED(rv) && mRootResult) {
-                OpenContainer(-1, mRootResult);
-
-                nsCOMPtr<nsIRDFResource> rootResource;
-                GetResultResource(mRootResult, getter_AddRefs(rootResource));
-
-                mRows.SetRootResource(rootResource);
-            }
-        }
-    }
-
-    if (mBoxObject) {
-        mBoxObject->EndUpdateBatch();
-    }
-
-    return rv;
-}
-
-nsresult
-nsXULTreeBuilder::GetTemplateActionRowFor(int32_t aRow, Element** aResult)
-{
-    // Get the template in the DOM from which we're supposed to
-    // generate text
-    nsTreeRows::Row& row = *(mRows[aRow]);
-
-    // The match stores the indices of the rule and query to use. Use these
-    // to look up the right nsTemplateRule and use that rule's action to get
-    // the treerow in the template.
-    int16_t ruleindex = row.mMatch->RuleIndex();
-    if (ruleindex >= 0) {
-        nsTemplateQuerySet* qs = mQuerySets[row.mMatch->QuerySetPriority()];
-        nsTemplateRule* rule = qs->GetRuleAt(ruleindex);
-        if (rule) {
-            nsCOMPtr<Element> children;
-            nsXULContentUtils::FindChildByTag(rule->GetAction(), kNameSpaceID_XUL,
-                                              nsGkAtoms::treechildren,
-                                              getter_AddRefs(children));
-            if (children) {
-                nsCOMPtr<Element> item;
-                nsXULContentUtils::FindChildByTag(children, kNameSpaceID_XUL,
-                                                  nsGkAtoms::treeitem,
-                                                  getter_AddRefs(item));
-                if (item)
-                    return nsXULContentUtils::FindChildByTag(item,
-                                                             kNameSpaceID_XUL,
-                                                             nsGkAtoms::treerow,
-                                                             aResult);
-            }
-        }
-    }
-
-    *aResult = nullptr;
-    return NS_OK;
-}
-
-Element*
-nsXULTreeBuilder::GetTemplateActionCellFor(int32_t aRow, nsTreeColumn& aCol)
-{
-    RefPtr<Element> row;
-    GetTemplateActionRowFor(aRow, getter_AddRefs(row));
-    if (!row) {
-        return nullptr;
-    }
-
-    RefPtr<nsAtom> colAtom(aCol.GetAtom());
-    int32_t colIndex(aCol.GetIndex());
-
-    Element* result = nullptr;
-    uint32_t j = 0;
-    for (nsIContent* child = row->GetFirstChild();
-         child;
-         child = child->GetNextSibling()) {
-        if (child->NodeInfo()->Equals(nsGkAtoms::treecell, kNameSpaceID_XUL)) {
-            if (colAtom &&
-                child->AsElement()->AttrValueIs(kNameSpaceID_None,
-                                                nsGkAtoms::ref, colAtom,
-                                                eCaseMatters)) {
-                return child->AsElement();
-            }
-
-            if (j == (uint32_t)colIndex) {
-                result = child->AsElement();
-            }
-            ++j;
-        }
-    }
-    return result;
-}
-
-nsresult
-nsXULTreeBuilder::GetResourceFor(int32_t aRow, nsIRDFResource** aResource)
-{
-    nsTreeRows::Row& row = *(mRows[aRow]);
-    return GetResultResource(row.mMatch->mResult, aResource);
-}
-
-nsresult
-nsXULTreeBuilder::OpenContainer(int32_t aIndex, nsIXULTemplateResult* aResult)
-{
-    // A row index of -1 in this case means ``open tree body''
-    NS_ASSERTION(aIndex >= -1 && aIndex < mRows.Count(), "bad row");
-    if (aIndex < -1 || aIndex >= mRows.Count())
-        return NS_ERROR_INVALID_ARG;
-
-    nsTreeRows::Subtree* container;
-
-    if (aIndex >= 0) {
-        nsTreeRows::iterator iter = mRows[aIndex];
-        container = mRows.EnsureSubtreeFor(iter.GetParent(),
-                                           iter.GetChildIndex());
-
-        iter->mContainerState = nsTreeRows::eContainerState_Open;
-    }
-    else
-        container = mRows.GetRoot();
-
-    if (! container)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    int32_t count;
-    OpenSubtreeOf(container, aIndex, aResult, &count);
-
-    // Notify the box object
-    if (mBoxObject) {
-        if (aIndex >= 0)
-            mBoxObject->InvalidateRow(aIndex);
-
-        if (count)
-            mBoxObject->RowCountChanged(aIndex + 1, count);
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTreeBuilder::OpenSubtreeOf(nsTreeRows::Subtree* aSubtree,
-                                int32_t aIndex,
-                                nsIXULTemplateResult *aResult,
-                                int32_t* aDelta)
-{
-    AutoTArray<int32_t, 8> open;
-    int32_t count = 0;
-
-    int32_t rulecount = mQuerySets.Length();
-
-    for (int32_t r = 0; r < rulecount; r++) {
-        nsTemplateQuerySet* queryset = mQuerySets[r];
-        OpenSubtreeForQuerySet(aSubtree, aIndex, aResult, queryset, &count, open);
-    }
-
-    // Now recursively deal with any open sub-containers that just got
-    // inserted. We need to do this back-to-front to avoid skewing offsets.
-    for (int32_t i = open.Length() - 1; i >= 0; --i) {
-        int32_t index = open[i];
-
-        nsTreeRows::Subtree* child =
-            mRows.EnsureSubtreeFor(aSubtree, index);
-
-        nsIXULTemplateResult* result = (*aSubtree)[index].mMatch->mResult;
-
-        int32_t delta;
-        OpenSubtreeOf(child, aIndex + index, result, &delta);
-        count += delta;
-    }
-
-    // Sort the container.
-    if (mSortVariable) {
-        NS_QuickSort(mRows.GetRowsFor(aSubtree),
-                     aSubtree->Count(),
-                     sizeof(nsTreeRows::Row),
-                     Compare,
-                     this);
-    }
-
-    *aDelta = count;
-    return NS_OK;
-}
-
-nsresult
-nsXULTreeBuilder::OpenSubtreeForQuerySet(nsTreeRows::Subtree* aSubtree,
-                                         int32_t aIndex,
-                                         nsIXULTemplateResult* aResult,
-                                         nsTemplateQuerySet* aQuerySet,
-                                         int32_t* aDelta,
-                                         nsTArray<int32_t>& open)
-{
-    int32_t count = *aDelta;
-
-    nsCOMPtr<nsISimpleEnumerator> results;
-    nsresult rv = mQueryProcessor->GenerateResults(mDataSource, aResult,
-                                                   aQuerySet->mCompiledQuery,
-                                                   getter_AddRefs(results));
-    if (NS_FAILED(rv))
-        return rv;
-
-    bool hasMoreResults;
-    rv = results->HasMoreElements(&hasMoreResults);
-
-    for (; NS_SUCCEEDED(rv) && hasMoreResults;
-           rv = results->HasMoreElements(&hasMoreResults)) {
-        nsCOMPtr<nsISupports> nr;
-        rv = results->GetNext(getter_AddRefs(nr));
-        if (NS_FAILED(rv))
-            return rv;
-
-        nsCOMPtr<nsIXULTemplateResult> nextresult = do_QueryInterface(nr);
-        if (!nextresult)
-            return NS_ERROR_UNEXPECTED;
-
-        nsCOMPtr<nsIRDFResource> resultid;
-        rv = GetResultResource(nextresult, getter_AddRefs(resultid));
-        if (NS_FAILED(rv))
-            return rv;
-
-        if (! resultid)
-            continue;
-
-        // check if there is already an existing match. If so, a previous
-        // query already generated content so the match is just added to the
-        // end of the set of matches.
-
-        bool generateContent = true;
-
-        nsTemplateMatch* prevmatch = nullptr;
-        nsTemplateMatch* existingmatch = nullptr;
-        if (mMatchMap.Get(resultid, &existingmatch)){
-            // check if there is an existing match that matched a rule
-            while (existingmatch) {
-                if (existingmatch->IsActive())
-                    generateContent = false;
-                prevmatch = existingmatch;
-                existingmatch = existingmatch->mNext;
-            }
-        }
-
-        nsTemplateMatch *newmatch =
-            nsTemplateMatch::Create(aQuerySet->Priority(), nextresult, nullptr);
-        if (!newmatch)
-            return NS_ERROR_OUT_OF_MEMORY;
-
-        if (generateContent) {
-            // Don't allow cyclic graphs to get our knickers in a knot.
-            bool cyclic = false;
-
-            if (aIndex >= 0) {
-                for (nsTreeRows::iterator iter = mRows[aIndex]; iter.GetDepth() > 0; iter.Pop()) {
-                    nsCOMPtr<nsIRDFResource> parentid;
-                    rv = GetResultResource(iter->mMatch->mResult, getter_AddRefs(parentid));
-                    if (NS_FAILED(rv)) {
-                        nsTemplateMatch::Destroy(newmatch, false);
-                        return rv;
-                    }
-
-                    if (resultid == parentid) {
-                        cyclic = true;
-                        break;
-                    }
-                }
-            }
-
-            if (cyclic) {
-                NS_WARNING("tree cannot handle cyclic graphs");
-                nsTemplateMatch::Destroy(newmatch, false);
-                continue;
-            }
-
-            int16_t ruleindex;
-            nsTemplateRule* matchedrule = nullptr;
-            rv = DetermineMatchedRule(nullptr, nextresult, aQuerySet,
-                                      &matchedrule, &ruleindex);
-            if (NS_FAILED(rv)) {
-                nsTemplateMatch::Destroy(newmatch, false);
-                return rv;
-            }
-
-            if (matchedrule) {
-                rv = newmatch->RuleMatched(aQuerySet, matchedrule, ruleindex,
-                                           nextresult);
-                if (NS_FAILED(rv)) {
-                    nsTemplateMatch::Destroy(newmatch, false);
-                    return rv;
-                }
-
-                // Remember that this match applied to this row
-                mRows.InsertRowAt(newmatch, aSubtree, count);
-
-                // If this is open, then remember it so we can recursively add
-                // *its* rows to the tree.
-                if (IsContainerOpen(nextresult)) {
-                    if (open.AppendElement(count) == nullptr)
-                        return NS_ERROR_OUT_OF_MEMORY;
-                }
-
-                ++count;
-            }
-
-            if (mFlags & eLoggingEnabled)
-                OutputMatchToLog(resultid, newmatch, true);
-
-        }
-
-        if (prevmatch) {
-            prevmatch->mNext = newmatch;
-        }
-        else {
-            mMatchMap.Put(resultid, newmatch);
-        }
-    }
-
-    *aDelta = count;
-    return rv;
-}
-
-nsresult
-nsXULTreeBuilder::CloseContainer(int32_t aIndex)
-{
-    NS_ASSERTION(aIndex >= 0 && aIndex < mRows.Count(), "bad row");
-    if (aIndex < 0 || aIndex >= mRows.Count())
-        return NS_ERROR_INVALID_ARG;
-
-    nsTreeRows::iterator iter = mRows[aIndex];
-
-    if (iter->mSubtree)
-        RemoveMatchesFor(*iter->mSubtree);
-
-
-    int32_t count = mRows.GetSubtreeSizeFor(iter);
-    mRows.RemoveSubtreeFor(iter);
-
-    iter->mContainerState = nsTreeRows::eContainerState_Closed;
-
-    if (mBoxObject) {
-        mBoxObject->InvalidateRow(aIndex);
-
-        if (count)
-            mBoxObject->RowCountChanged(aIndex + 1, -count);
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsXULTreeBuilder::RemoveMatchesFor(nsTreeRows::Subtree& subtree)
-{
-    for (int32_t i = subtree.Count() - 1; i >= 0; --i) {
-        nsTreeRows::Row& row = subtree[i];
-
-        nsTemplateMatch* match = row.mMatch;
-
-        nsCOMPtr<nsIRDFResource> id;
-        nsresult rv = GetResultResource(match->mResult, getter_AddRefs(id));
-        if (NS_FAILED(rv))
-            return rv;
-
-        nsTemplateMatch* existingmatch;
-        if (mMatchMap.Get(id, &existingmatch)) {
-            while (existingmatch) {
-                nsTemplateMatch* nextmatch = existingmatch->mNext;
-                nsTemplateMatch::Destroy(existingmatch, true);
-                existingmatch = nextmatch;
-            }
-
-            mMatchMap.Remove(id);
-        }
-
-        if ((row.mContainerState == nsTreeRows::eContainerState_Open) && row.mSubtree)
-            RemoveMatchesFor(*(row.mSubtree));
-    }
-
-    return NS_OK;
-}
-
-
-bool
-nsXULTreeBuilder::IsContainerOpen(nsIXULTemplateResult *aResult)
-{
-  // items are never open if recursion is disabled
-  if ((mFlags & eDontRecurse) && aResult != mRootResult) {
-    return false;
-  }
-
-  if (!mLocalStore) {
-    return false;
-  }
-
-  nsIDocument* doc = mRoot->GetComposedDoc();
-  if (!doc) {
-    return false;
-  }
-
-  nsIURI* docURI = doc->GetDocumentURI();
-
-  nsAutoString nodeid;
-  nsresult rv = aResult->GetId(nodeid);
-  if (NS_FAILED(rv)) {
-    return false;
-  }
-
-  nsAutoCString utf8uri;
-  rv = docURI->GetSpec(utf8uri);
-  if (NS_WARN_IF(NS_FAILED(rv))) {
-      return false;
-  }
-  NS_ConvertUTF8toUTF16 uri(utf8uri);
-
-  nsAutoString val;
-  mLocalStore->GetValue(uri, nodeid, NS_LITERAL_STRING("open"), val);
-  return val.EqualsLiteral("true");
-}
-
-int
-nsXULTreeBuilder::Compare(const void* aLeft, const void* aRight, void* aClosure)
-{
-    nsXULTreeBuilder* self = static_cast<nsXULTreeBuilder*>(aClosure);
-
-    nsTreeRows::Row* left = static_cast<nsTreeRows::Row*>
-                                       (const_cast<void*>(aLeft));
-
-    nsTreeRows::Row* right = static_cast<nsTreeRows::Row*>
-                                        (const_cast<void*>(aRight));
-
-    return self->CompareResults(left->mMatch->mResult, right->mMatch->mResult);
-}
-
-int32_t
-nsXULTreeBuilder::CompareResults(nsIXULTemplateResult* aLeft, nsIXULTemplateResult* aRight)
-{
-    // this is an extra check done for RDF queries such that results appear in
-    // the order they appear in their containing Seq
-    if (mSortDirection == eDirection_Natural && mDB) {
-        // If the sort order is ``natural'', then see if the container
-        // is an RDF sequence. If so, we'll try to use the ordinal
-        // properties to determine order.
-        //
-        // XXX the problem with this is, it doesn't always get the
-        // *real* container; e.g.,
-        //
-        //  <treerow uri="?uri" />
-        //
-        //  <triple subject="?uri"
-        //          predicate="http://home.netscape.com/NC-rdf#subheadings"
-        //          object="?subheadings" />
-        //
-        //  <member container="?subheadings" child="?subheading" />
-        //
-        // In this case mRefVariable is bound to ?uri, not
-        // ?subheadings. (The ``container'' in the template sense !=
-        // container in the RDF sense.)
-
-        nsCOMPtr<nsISupports> ref;
-        nsresult rv = aLeft->GetBindingObjectFor(mRefVariable, getter_AddRefs(ref));
-        if (NS_FAILED(rv))
-            return 0;
-
-        nsCOMPtr<nsIRDFResource> container = do_QueryInterface(ref);
-        if (container) {
-            bool isSequence = false;
-            gRDFContainerUtils->IsSeq(mDB, container, &isSequence);
-            if (isSequence) {
-                // Determine the indices of the left and right elements
-                // in the container.
-                int32_t lindex = 0, rindex = 0;
-
-                nsCOMPtr<nsIRDFResource> leftitem;
-                aLeft->GetResource(getter_AddRefs(leftitem));
-                if (leftitem) {
-                    gRDFContainerUtils->IndexOf(mDB, container, leftitem, &lindex);
-                    if (lindex < 0)
-                        return 0;
-                }
-
-                nsCOMPtr<nsIRDFResource> rightitem;
-                aRight->GetResource(getter_AddRefs(rightitem));
-                if (rightitem) {
-                    gRDFContainerUtils->IndexOf(mDB, container, rightitem, &rindex);
-                    if (rindex < 0)
-                        return 0;
-                }
-
-                return lindex - rindex;
-            }
-        }
-    }
-
-    int32_t sortorder;
-    if (!mQueryProcessor)
-        return 0;
-
-    mQueryProcessor->CompareResults(aLeft, aRight, mSortVariable, mSortHints, &sortorder);
-
-    if (sortorder)
-        sortorder = sortorder * mSortDirection;
-    return sortorder;
-}
-
-nsresult
-nsXULTreeBuilder::SortSubtree(nsTreeRows::Subtree* aSubtree)
-{
-    NS_QuickSort(mRows.GetRowsFor(aSubtree),
-                 aSubtree->Count(),
-                 sizeof(nsTreeRows::Row),
-                 Compare,
-                 this);
-
-    for (int32_t i = aSubtree->Count() - 1; i >= 0; --i) {
-        nsTreeRows::Subtree* child = (*aSubtree)[i].mSubtree;
-        if (child)
-            SortSubtree(child);
-    }
-
-    return NS_OK;
-}
-
-bool
-nsXULTreeBuilder::CanDrop(int32_t aRow, int32_t aOrientation,
-                          DataTransfer* aDataTransfer, ErrorResult& aError)
-{
-    uint32_t count = mObservers.Length();
-    for (uint32_t i = 0; i < count; ++i) {
-        nsCOMPtr<nsIXULTreeBuilderObserver> observer = mObservers.SafeElementAt(i);
-        if (observer) {
-            bool canDrop = false;
-            observer->CanDrop(aRow, aOrientation, aDataTransfer, &canDrop);
-            if (canDrop) {
-                return true;
-            }
-        }
-    }
-
-    return false;
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::CanDrop(int32_t index, int32_t orientation,
-                          nsIDOMDataTransfer* dataTransfer, bool *_retval)
-{
-    ErrorResult rv;
-    *_retval = CanDrop(index, orientation, DataTransfer::Cast(dataTransfer),
-                       rv);
-    return rv.StealNSResult();
-}
-
-void
-nsXULTreeBuilder::Drop(int32_t aRow, int32_t aOrientation,
-                       DataTransfer* aDataTransfer, ErrorResult& aError)
-{
-    uint32_t count = mObservers.Length();
-    for (uint32_t i = 0; i < count; ++i) {
-        nsCOMPtr<nsIXULTreeBuilderObserver> observer = mObservers.SafeElementAt(i);
-        if (observer) {
-            bool canDrop = false;
-            observer->CanDrop(aRow, aOrientation, aDataTransfer, &canDrop);
-            if (canDrop)
-                observer->OnDrop(aRow, aOrientation, aDataTransfer);
-        }
-    }
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::Drop(int32_t row, int32_t orient, nsIDOMDataTransfer* dataTransfer)
-{
-    ErrorResult rv;
-    Drop(row, orient, DataTransfer::Cast(dataTransfer), rv);
-    return rv.StealNSResult();
-}
-
-NS_IMETHODIMP
-nsXULTreeBuilder::IsSorted(bool *_retval)
-{
-  *_retval = (mSortVariable != nullptr);
-  return NS_OK;
-}
-
-bool
-nsXULTreeBuilder::IsValidRowIndex(int32_t aRowIndex)
-{
-    return aRowIndex >= 0 && aRowIndex < int32_t(mRows.Count());
-}
deleted file mode 100644
--- a/dom/xul/templates/nsXULTreeBuilder.h
+++ /dev/null
@@ -1,322 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsXULTreeBuilder_h__
-#define nsXULTreeBuilder_h__
-
-#include "nsCOMPtr.h"
-#include "nsITreeView.h"
-#include "nsTreeRows.h"
-#include "nsXULTemplateBuilder.h"
-
-class nsIContent;
-class nsIRDFResource;
-class nsITreeSelection;
-class nsIXULStore;
-class nsIXULTemplateResult;
-class nsTreeColumn;
-
-namespace mozilla {
-namespace dom {
-
-class DataTransfer;
-class TreeBoxObject;
-class XULTreeBuilderObserver;
-
-} // namespace dom
-} // namespace mozilla
-
-/**
- * A XUL template builder that serves as an tree view, allowing
- * (pretty much) arbitrary RDF to be presented in an tree.
- */
-class nsXULTreeBuilder : public nsXULTemplateBuilder,
-                         public nsIXULTreeBuilder,
-                         public nsINativeTreeView
-{
-public:
-    explicit nsXULTreeBuilder(Element* aElement);
-
-    // nsISupports
-    NS_DECL_ISUPPORTS_INHERITED
-    NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsXULTreeBuilder,
-                                             nsXULTemplateBuilder)
-
-    virtual JSObject* WrapObject(JSContext* aCx,
-                                 JS::Handle<JSObject*> aGivenProto) override;
-
-    already_AddRefed<nsIRDFResource>
-      GetResourceAtIndex(int32_t aIndex, mozilla::ErrorResult& aError);
-    int32_t GetIndexOfResource(nsIRDFResource* aResource,
-                               mozilla::ErrorResult& aError);
-    void AddObserver(mozilla::dom::XULTreeBuilderObserver& aObserver);
-    void RemoveObserver(mozilla::dom::XULTreeBuilderObserver& aObserver);
-    void Sort(Element&);
-
-    int32_t RowCount()
-    {
-        return mRows.Count();
-    }
-    nsITreeSelection* GetSelection()
-    {
-        return mSelection;
-    }
-    void SetSelection(nsITreeSelection* aSelection,
-                      mozilla::ErrorResult& aError);
-    void GetRowProperties(int32_t aRow, nsAString& aProperties,
-                          mozilla::ErrorResult& aError);
-    void GetCellProperties(int32_t aRow, nsTreeColumn& aColumn,
-                           nsAString& aProperties, mozilla::ErrorResult& aError);
-    void GetColumnProperties(nsTreeColumn& aColumn, nsAString& aProperties)
-    {
-    }
-    bool IsContainer(int32_t aRow, mozilla::ErrorResult& aError);
-    bool IsContainerOpen(int32_t aRow, mozilla::ErrorResult& aError);
-    bool IsContainerEmpty(int32_t aRow, mozilla::ErrorResult& aError);
-    bool IsSeparator(int32_t aRow, mozilla::ErrorResult& aError);
-    bool IsSorted()
-    {
-        return mSortVariable != nullptr;
-    }
-    bool CanDrop(int32_t aRow, int32_t aOrientation,
-                 mozilla::dom::DataTransfer* aDataTransfer,
-                 mozilla::ErrorResult& aError);
-    void Drop(int32_t aRow, int32_t aOrientation,
-              mozilla::dom::DataTransfer* aDataTransfer,
-              mozilla::ErrorResult& aError);
-    int32_t GetParentIndex(int32_t aRow, mozilla::ErrorResult& aError);
-    bool HasNextSibling(int32_t aRow, int32_t aAfterIndex,
-                        mozilla::ErrorResult& aError);
-    int32_t GetLevel(int32_t aRow, mozilla::ErrorResult& aError);
-    void GetImageSrc(int32_t aRow, nsTreeColumn& aColumn, nsAString& aSrc,
-                     mozilla::ErrorResult& aError);
-    int32_t GetProgressMode(int32_t aRow, nsTreeColumn& aColumn,
-                            mozilla::ErrorResult& aError);
-    void GetCellValue(int32_t aRow, nsTreeColumn& aColumn, nsAString& aValue,
-                      mozilla::ErrorResult& aError);
-    void GetCellText(int32_t aRow, nsTreeColumn& aColumn, nsAString& aText,
-                     mozilla::ErrorResult& aError);
-    void SetTree(mozilla::dom::TreeBoxObject* aTree,
-                 mozilla::ErrorResult& aError);
-    void ToggleOpenState(int32_t aRow, mozilla::ErrorResult& aError);
-    void CycleHeader(nsTreeColumn& aColumn, mozilla::ErrorResult& aError);
-    // XPCOM SelectionChanged() is OK
-    void CycleCell(int32_t aRow, nsTreeColumn& aColumn);
-    bool IsEditable(int32_t aRow, nsTreeColumn& aColumn,
-                    mozilla::ErrorResult& aError);
-    bool IsSelectable(int32_t aRow, nsTreeColumn& aColumn,
-                      mozilla::ErrorResult& aError);
-    void SetCellValue(int32_t aRow, nsTreeColumn& aColumn,
-                      const nsAString& aValue, mozilla::ErrorResult& aError)
-    {
-    }
-    void SetCellText(int32_t aRow, nsTreeColumn& aColumn,
-                      const nsAString& aText, mozilla::ErrorResult& aError)
-    {
-    }
-    void PerformAction(const nsAString& aAction);
-    void PerformActionOnRow(const nsAString& aAction, int32_t aRow);
-    void PerformActionOnCell(const nsAString& aAction, int32_t aRow,
-                             nsTreeColumn& aColumn);
-
-    using nsIXULTemplateBuilder::HasGeneratedContent;
-    virtual bool HasGeneratedContent(nsIRDFResource* aResource,
-                                     const nsAString& aTag,
-                                     mozilla::ErrorResult& aError) override;
-
-    // nsIXULTreeBuilder
-    NS_DECL_NSIXULTREEBUILDER
-
-    // nsITreeView
-    NS_DECL_NSITREEVIEW
-    // nsINativeTreeView: Untrusted code can use us
-    NS_IMETHOD EnsureNative() override { return NS_OK; }
-
-    // nsIMutationObserver
-    NS_DECL_NSIMUTATIONOBSERVER_NODEWILLBEDESTROYED
-
-protected:
-    friend struct ResultComparator;
-
-    ~nsXULTreeBuilder();
-
-    /**
-     * Uninitialize the template builder
-     */
-    virtual void Uninit(bool aIsFinal) override;
-
-    /**
-     * Get sort variables from the active <treecol>
-     */
-    nsresult
-    EnsureSortVariables();
-
-    virtual nsresult
-    RebuildAll() override;
-
-    /**
-     * Given a row, use the row's match to figure out the appropriate
-     * <treerow> in the rule's <action>.
-     */
-    nsresult
-    GetTemplateActionRowFor(int32_t aRow, mozilla::dom::Element** aResult);
-
-    /**
-     * Given a row and a column ID, use the row's match to figure out
-     * the appropriate <treecell> in the rule's <action>.
-     */
-    mozilla::dom::Element*
-    GetTemplateActionCellFor(int32_t aRow, nsTreeColumn& aCol);
-
-    /**
-     * Return the resource corresponding to a row in the tree.
-     */
-    nsresult
-    GetResourceFor(int32_t aRow, nsIRDFResource** aResource);
-
-    /**
-     * Open a container row, inserting the container's children into
-     * the view.
-     */
-    nsresult
-    OpenContainer(int32_t aIndex, nsIXULTemplateResult* aResult);
-
-    /**
-     * Helper for OpenContainer, recursively open subtrees, remembering
-     * persisted ``open'' state
-     */
-    nsresult
-    OpenSubtreeOf(nsTreeRows::Subtree* aSubtree,
-                  int32_t aIndex,
-                  nsIXULTemplateResult *aResult,
-                  int32_t* aDelta);
-
-    nsresult
-    OpenSubtreeForQuerySet(nsTreeRows::Subtree* aSubtree,
-                           int32_t aIndex,
-                           nsIXULTemplateResult *aResult,
-                           nsTemplateQuerySet* aQuerySet,
-                           int32_t* aDelta,
-                           nsTArray<int32_t>& open);
-
-    /**
-     * Close a container row, removing the container's childrem from
-     * the view.
-     */
-    nsresult
-    CloseContainer(int32_t aIndex);
-
-    /**
-     * Remove the matches for the rows in a subtree
-     */
-    nsresult
-    RemoveMatchesFor(nsTreeRows::Subtree& subtree);
-
-    /**
-     * Helper method that determines if the specified container is open.
-     */
-    bool
-    IsContainerOpen(nsIXULTemplateResult* aResource);
-
-    /**
-     * A sorting callback for NS_QuickSort().
-     */
-    static int
-    Compare(const void* aLeft, const void* aRight, void* aClosure);
-
-    /**
-     * The real sort routine
-     */
-    int32_t
-    CompareResults(nsIXULTemplateResult* aLeft, nsIXULTemplateResult* aRight);
-
-    /**
-     * Sort the specified subtree, and recursively sort any subtrees
-     * beneath it.
-     */
-    nsresult
-    SortSubtree(nsTreeRows::Subtree* aSubtree);
-
-    // GetInsertionLocations, ReplaceMatch and SynchronizeResult are inherited
-    // from nsXULTemplateBuilder
-
-    /**
-     * Return true if the result can be inserted into the template as a new
-     * row.
-     */
-    bool
-    GetInsertionLocations(nsIXULTemplateResult* aResult,
-                          nsCOMArray<Element>** aLocations) override;
-
-    /**
-     * Implement result replacement
-     */
-    virtual nsresult
-    ReplaceMatch(nsIXULTemplateResult* aOldResult,
-                 nsTemplateMatch* aNewMatch,
-                 nsTemplateRule* aNewMatchRule,
-                 Element* aContext) override;
-
-    /**
-     * Implement match synchronization
-     */
-    virtual nsresult
-    SynchronizeResult(nsIXULTemplateResult* aResult) override;
-
-    bool IsValidRowIndex(int32_t aRowIndex);
-
-    /**
-     * The tree's box object, used to communicate with the front-end.
-     */
-    nsCOMPtr<nsITreeBoxObject> mBoxObject;
-
-    /**
-     * The tree's selection object.
-     */
-    nsCOMPtr<nsITreeSelection> mSelection;
-
-    /**
-     * The datasource that's used to persist open folder information
-     */
-    nsCOMPtr<nsIRDFDataSource> mPersistStateStore;
-
-    /**
-     * The rows in the view
-     */
-    nsTreeRows mRows;
-
-    /**
-     * The currently active sort variable
-     */
-    RefPtr<nsAtom> mSortVariable;
-
-    enum Direction {
-        eDirection_Descending = -1,
-        eDirection_Natural    =  0,
-        eDirection_Ascending  = +1
-    };
-
-    /**
-     * The currently active sort order
-     */
-    Direction mSortDirection;
-
-    /*
-     * Sort hints (compare case, etc)
-     */
-    uint32_t mSortHints;
-
-    /**
-     * The builder observers.
-     */
-    nsTArray<nsCOMPtr<nsIXULTreeBuilderObserver>> mObservers;
-
-    /*
-     * XUL store for holding open container state
-     */
-    nsCOMPtr<nsIXULStore> mLocalStore;
-};
-
-#endif // nsXULTreeBuilder_h__
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/animals.rdf
+++ /dev/null
@@ -1,224 +0,0 @@
-<?xml version="1.0"?>
-
-<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:NC="http://home.netscape.com/NC-rdf#"
-         xmlns:ANIMALS="http://www.some-fictitious-zoo.com/rdf#">
-
-   <ANIMALS:Class RDF:about="http://www.some-fictitious-zoo.com/arachnids">
-     <ANIMALS:name>Arachnids</ANIMALS:name>
-   </ANIMALS:Class>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/arachnids/tarantula" ANIMALS:specimens="3">
-         <ANIMALS:name>Tarantula</ANIMALS:name>
-         <ANIMALS:species>Avicularia avicularia</ANIMALS:species>
-       </RDF:Description>
-
-   <ANIMALS:Class RDF:about="http://www.some-fictitious-zoo.com/birds">
-     <ANIMALS:name>Birds</ANIMALS:name>
-     <ANIMALS:keeper resource="http://www.some-fictitious-zoo.com/humans/sarah"/>
-   </ANIMALS:Class>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/birds/emu" ANIMALS:specimens="12">
-         <ANIMALS:name>Emu</ANIMALS:name>
-         <ANIMALS:species>Dromaius novaehollandiae</ANIMALS:species>
-       </RDF:Description>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/birds/barnowl" ANIMALS:specimens="4">
-         <ANIMALS:name>Barn Owl</ANIMALS:name>
-         <ANIMALS:species>Tyto alba</ANIMALS:species>
-       </RDF:Description>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/birds/raven" ANIMALS:specimens="0">
-         <ANIMALS:name>Raven</ANIMALS:name>
-         <ANIMALS:species>Corvus corax</ANIMALS:species>
-       </RDF:Description>
-
-   <ANIMALS:Class RDF:about="http://www.some-fictitious-zoo.com/crustaceans">
-     <ANIMALS:name>Crustaceans</ANIMALS:name>
-     <ANIMALS:keeper resource="http://www.some-fictitious-zoo.com/humans/robert"/>
-   </ANIMALS:Class>
-
-   <ANIMALS:Class RDF:about="http://www.some-fictitious-zoo.com/fish">
-     <ANIMALS:name>Fish</ANIMALS:name>
-   </ANIMALS:Class>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/fish/cod" ANIMALS:specimens="0">
-         <ANIMALS:name>Cod</ANIMALS:name>
-         <ANIMALS:species>Gadus morhua</ANIMALS:species>
-       </RDF:Description>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/fish/swordfish" ANIMALS:specimens="3">
-         <ANIMALS:name>Swordfish</ANIMALS:name>
-         <ANIMALS:species>Xiphias gladius</ANIMALS:species>
-       </RDF:Description>
-
-   <ANIMALS:Class RDF:about="http://www.some-fictitious-zoo.com/mammals">
-     <ANIMALS:name>Mammals</ANIMALS:name>
-   </ANIMALS:Class>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/mammals/lion">
-         <ANIMALS:name>Lion</ANIMALS:name>
-         <ANIMALS:species>Panthera leo</ANIMALS:species>
-         <ANIMALS:specimens NC:parseType="Integer">4</ANIMALS:specimens>
-         <ANIMALS:specimensAsString>4</ANIMALS:specimensAsString>
-       </RDF:Description>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/mammals/hippopotamus">
-         <ANIMALS:name>HIPPOPOTAMUS</ANIMALS:name>
-         <ANIMALS:species>Hippopotamus amphibius</ANIMALS:species>
-         <ANIMALS:specimens NC:parseType="Integer">2</ANIMALS:specimens>
-         <ANIMALS:specimensAsString>2</ANIMALS:specimensAsString>
-       </RDF:Description>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/mammals/africanelephant">
-         <ANIMALS:name>African Elephant</ANIMALS:name>
-         <ANIMALS:species>Loxodonta africana</ANIMALS:species>
-         <ANIMALS:specimens NC:parseType="Integer">14</ANIMALS:specimens>
-         <ANIMALS:specimensAsString>14</ANIMALS:specimensAsString>
-       </RDF:Description>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/mammals/llama">
-         <ANIMALS:name>LLAMA</ANIMALS:name>
-         <ANIMALS:species>Lama glama</ANIMALS:species>
-         <ANIMALS:specimens NC:parseType="Integer">5</ANIMALS:specimens>
-         <ANIMALS:specimensAsString>5</ANIMALS:specimensAsString>
-       </RDF:Description>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/mammals/polarbear">
-         <ANIMALS:name>Polar Bear</ANIMALS:name>
-         <ANIMALS:species>Thalarctos maritimus</ANIMALS:species>
-         <ANIMALS:specimens NC:parseType="Integer">20</ANIMALS:specimens>
-         <ANIMALS:specimensAsString>20</ANIMALS:specimensAsString>
-       </RDF:Description>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/mammals/aardvark">
-         <ANIMALS:name>aardvark</ANIMALS:name>
-         <ANIMALS:species>Orycteropus afer</ANIMALS:species>
-         <ANIMALS:specimens NC:parseType="Integer">2</ANIMALS:specimens>
-         <ANIMALS:specimensAsString>2</ANIMALS:specimensAsString>
-       </RDF:Description>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">
-         <ANIMALS:name>Nine-banded Armadillo</ANIMALS:name>
-         <ANIMALS:species>Dasypus novemcinctus</ANIMALS:species>
-         <ANIMALS:specimens NC:parseType="Integer">1</ANIMALS:specimens>
-         <ANIMALS:specimensAsString>1</ANIMALS:specimensAsString>
-       </RDF:Description>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/mammals/gorilla">
-         <ANIMALS:name>Gorilla</ANIMALS:name>
-         <ANIMALS:species>Gorilla gorilla</ANIMALS:species>
-         <ANIMALS:specimens NC:parseType="Integer">7</ANIMALS:specimens>
-         <ANIMALS:specimensAsString>7</ANIMALS:specimensAsString>
-       </RDF:Description>
-
-   <ANIMALS:Class RDF:about="http://www.some-fictitious-zoo.com/reptiles">
-     <ANIMALS:name>Reptiles</ANIMALS:name>
-     <ANIMALS:keeper resource="http://www.some-fictitious-zoo.com/humans/robert"/>
-   </ANIMALS:Class>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/reptiles/anaconda" ANIMALS:specimens="1">
-         <ANIMALS:name>Anaconda</ANIMALS:name>
-         <ANIMALS:species>Eunectes murinus</ANIMALS:species>
-       </RDF:Description>
-
-       <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/reptiles/chameleon" ANIMALS:specimens="2">
-         <ANIMALS:name>Chameleon</ANIMALS:name>
-         <ANIMALS:species>Chamaeleo chamaelon</ANIMALS:species>
-       </RDF:Description>
-
-  <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/some-animals" ANIMALS:name="Zoo Animals">
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/arachnids"/>
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/birds"/>
-  </RDF:Seq>
-
-  <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/all-animals" ANIMALS:name="Zoo Animals">
-    <RDF:li>
-      <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/arachnids">
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/arachnids/tarantula"/>
-      </RDF:Seq>
-    </RDF:li>
-    <RDF:li>
-      <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/birds">
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/birds/emu"/>
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/birds/barnowl"/>
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/birds/raven"/>
-      </RDF:Seq>
-    </RDF:li>
-    <RDF:li>
-      <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/crustaceans"/>
-    </RDF:li>
-    <RDF:li>
-      <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/fish">
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/fish/cod"/>
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/fish/swordfish"/>
-      </RDF:Seq>
-    </RDF:li>
-    <RDF:li>
-      <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/mammals">
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/mammals/lion"/>
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/mammals/hippopotamus"/>
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/mammals/africanelephant"/>
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/mammals/llama"/>
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/mammals/polarbear"/>
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/mammals/aardvark"/>
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo"/>
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/mammals/gorilla"/>
-      </RDF:Seq>
-    </RDF:li>
-    <RDF:li>
-      <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/reptiles">
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/reptiles/anaconda"/>
-        <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/reptiles/chameleon"/>
-      </RDF:Seq>
-    </RDF:li>
-  </RDF:Seq>
-
-  <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/humans" ANIMALS:name="Humans">
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/humans/sarah"/>
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/humans/robert"/>
-  </RDF:Seq>
-
-  <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/sarahs-pets" ANIMALS:name="Sarah's Pets">
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/birds/emu"/>
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/arachnids/tarantula"/>
-  </RDF:Seq>
-
-  <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/roberts-pets" ANIMALS:name="Robert's Pets">
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/reptiles/chameleon"/>
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/arachnids/tarantula"/>
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/mammals/llama"/>
-  </RDF:Seq>
-
-  <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/humans/sarah" ANIMALS:name="Sarah">
-    <ANIMALS:pets resource="http://www.some-fictitious-zoo.com/sarahs-pets"/>
-    <ANIMALS:favoriteAnimal resource="http://www.some-fictitious-zoo.com/birds/emu"/>
-    <ANIMALS:favoriteAnimal resource="http://www.some-fictitious-zoo.com/mammals/polarbear"/>
-    <ANIMALS:favoriteAnimal resource="http://www.some-fictitious-zoo.com/arachnids/tarantula"/>
-    <ANIMALS:description>
-      Sarah became caretaker of the Fictitious Zoo's emu exhibit in 2001. With so
-      many emus living there, she has a lot to do!
-    </ANIMALS:description>
-  </RDF:Description>
-
-  <RDF:Description RDF:about="http://www.some-fictitious-zoo.com/humans/robert" ANIMALS:name="Robert">
-    <ANIMALS:pets resource="http://www.some-fictitious-zoo.com/roberts-pets"/>
-    <ANIMALS:favoriteAnimal resource="http://www.some-fictitious-zoo.com/arachnids/tarantula"/>
-    <ANIMALS:favoriteAnimal resource="http://www.some-fictitious-zoo.com/reptiles/anaconda"/>
-    <ANIMALS:favoriteAnimal resource="http://www.some-fictitious-zoo.com/reptiles/chameleon"/>
-    <ANIMALS:favoriteAnimal resource="http://www.some-fictitious-zoo.com/mammals/africanelephant"/>
-    <ANIMALS:description>
-      Robert helps visitors to the Fictitious Zoo's reptile pavilion learn
-      more about some of the more unusual creatures that live there.
-    </ANIMALS:description>
-    <ANIMALS:lastName>Sanderson</ANIMALS:lastName>
-  </RDF:Description>
-
-  <RDF:Seq RDF:about="http://www.some-fictitious-zoo.com/marked" ANIMALS:name="Marked">
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/humans/sarah"/>
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/mammals"/>
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/crustaceans"/>
-    <RDF:li RDF:resource="http://www.some-fictitious-zoo.com/birds/emu"/>
-  </RDF:Seq>
-
-</RDF:RDF>
deleted file mode 100644
index 7ba88ff74b35fb95ae8ebc468a61d7c4663c3232..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/animals.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE zoo [
-    <!ATTLIST species id ID #REQUIRED>
-]>
-
-<zoo>
-  <class>
-    <name>Reptiles</name>
-    <species id="Chamaeleo-chamaelon" name="Chameleon" specimens="2"/>
-  </class>
-  <class>
-    <name>Birds</name>
-    <species id="Dromaius-novaehollandiae" name="Emu" specimens="12"/>
-    <species id="Tyto-alba" name="Barn Owl" specimens="4"/>
-    <species id="Corvus-corax" name="Raven" specimens="0"/>
-    <location>Aviary</location>
-  </class>
-</zoo>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/bug441785-1.rdf
+++ /dev/null
@@ -1,263 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:row="http://dummy/rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#">
-	<RDF:Bag about="urn:data:row">
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111110</row:id>
-				<row:title>FILE 1 -- A</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111111</row:id>
-				<row:title>FILE 1 -- B</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111110</row:id>
-				<row:title>FILE 1 -- C</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111111</row:id>
-				<row:title>FILE 1 -- D</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111112</row:id>
-				<row:title>FILE 1 -- E</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111110</row:id>
-				<row:title>FILE 1 -- F</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111114</row:id>
-				<row:title>FILE 1 -- G</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111111</row:id>
-				<row:title>FILE 1 -- H</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111118</row:id>
-				<row:title>FILE 1 -- I</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111116</row:id>
-				<row:title>FILE 1 -- J</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111110</row:id>
-				<row:title>FILE 1 -- K</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111119</row:id>
-				<row:title>FILE 1 -- L</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111116</row:id>
-				<row:title>FILE 1 -- M</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111111</row:id>
-				<row:title>FILE 1 -- N</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111113</row:id>
-				<row:title>FILE 1 -- O</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111111</row:id>
-				<row:title>FILE 1 -- P</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111117</row:id>
-				<row:title>FILE 1 -- Q</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111110</row:id>
-				<row:title>FILE 1 -- R</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111113</row:id>
-				<row:title>FILE 1 -- S</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111112</row:id>
-				<row:title>FILE 1 -- T</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111116</row:id>
-				<row:title>FILE 1 -- U</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111111</row:id>
-				<row:title>FILE 1 -- V</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111121</row:id>
-				<row:title>FILE 1 -- W</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111114</row:id>
-				<row:title>FILE 1 -- X</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111122</row:id>
-				<row:title>FILE 1 -- Y</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111113</row:id>
-				<row:title>FILE 1 -- Z</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111119</row:id>
-				<row:title>FILE 1 -- AA</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111117</row:id>
-				<row:title>FILE 1 -- BB</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111117</row:id>
-				<row:title>FILE 1 -- CC</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111117</row:id>
-				<row:title>FILE 1 -- DD</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111116</row:id>
-				<row:title>FILE 1 -- EE</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111124</row:id>
-				<row:title>FILE 1 -- FF</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111118</row:id>
-				<row:title>FILE 1 -- GG</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111117</row:id>
-				<row:title>FILE 1 -- HH</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111118</row:id>
-				<row:title>FILE 1 -- II</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111125</row:id>
-				<row:title>FILE 1 -- JJ</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111124</row:id>
-				<row:title>FILE 1 -- KK</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111132</row:id>
-				<row:title>FILE 1 -- LL</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111136</row:id>
-				<row:title>FILE 1 -- MM</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111123</row:id>
-				<row:title>FILE 1 -- NN</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111122</row:id>
-				<row:title>FILE 1 -- OO</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">111110</row:id>
-				<row:title>FILE 1 -- PP</row:title>
-			</RDF:Description>
-		</RDF:li>
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">1111116</row:id>
-				<row:title>FILE 1 -- QQ</row:title>
-			</RDF:Description>
-		</RDF:li>
-	</RDF:Bag>
-</RDF:RDF>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/bug441785-2.rdf
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:row="http://dummy/rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#">
-	<RDF:Bag about="urn:data:row">
-		<RDF:li>
-			<RDF:Description>
-				<row:id NC:parseType="Integer">222220</row:id>
-				<row:title>FILE 2 -- A</row:title>
-			</RDF:Description>
-		</RDF:li>
-	</RDF:Bag>
-</RDF:RDF>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/chrome.ini
+++ /dev/null
@@ -1,225 +0,0 @@
-[DEFAULT]
-skip-if = os == 'android'
-support-files =
-  animals.rdf
-  animals.sqlite
-  animals.xml
-  bug441785-1.rdf
-  bug441785-2.rdf
-  templates_shared.js
-
-[test_bug329335.xul]
-[test_bug330010.xul]
-skip-if = os == "win"
-support-files = file_bug330010.rdf
-[test_bug397148.xul]
-skip-if = true # Bug 879531
-[test_bug441785.xul]
-[test_bug476634.xul]
-[test_sortservice.xul]
-[test_tmpl_bindingsextendedsyntax.xul]
-[test_tmpl_bindingsmultiple.xul]
-[test_tmpl_bindingsquerysyntax.xul]
-[test_tmpl_bindingsreversed.xul]
-[test_tmpl_bindingssameastriple.xul]
-[test_tmpl_containerandmembervariablechanged.xul]
-[test_tmpl_containervariablechanged.xul]
-[test_tmpl_containmentattribute.xul]
-[test_tmpl_defaultcontainervariableisuri.xul]
-[test_tmpl_errors.xul]
-[test_tmpl_extendedsyntax.xul]
-[test_tmpl_extendedsyntaxemptyconditions.xul]
-[test_tmpl_extendedsyntaxotherrefvariable.xul]
-[test_tmpl_extendedsyntaxremoveunmatched.xul]
-[test_tmpl_extendedsyntaxsimplevariablesubstitution.xul]
-[test_tmpl_extendedsyntaxtworulesrecurse.xul]
-[test_tmpl_extendedsyntaxusinganinterveningcontainer.xul]
-[test_tmpl_extendedvariablesubstitution.xul]
-[test_tmpl_gridelement.xul]
-[test_tmpl_htmlelementextendedsyntaxwithbinding.xul]
-[test_tmpl_htmlelementquerysyntaxrecursive.xul]
-[test_tmpl_htmlelementquerysyntaxwithmultiplerules.xul]
-[test_tmpl_htmlelementsimplesyntax.xul]
-[test_tmpl_htmlelementsimplesyntaxusingatextnode.xul]
-[test_tmpl_invalidqp.xul]
-[test_tmpl_listboxelement.xul]
-[test_tmpl_literalasmember.xul]
-[test_tmpl_membervariablechanged.xul]
-[test_tmpl_membervariablesubstitution.xul]
-[test_tmpl_menuelement.xul]
-[test_tmpl_menuelementrecursive.xul]
-[test_tmpl_menulistelement.xul]
-[test_tmpl_mixedsyntaxiscontainer.xul]
-[test_tmpl_mixedsyntaxiscontainerisempty.xul]
-[test_tmpl_mixedsyntaxisempty.xul]
-[test_tmpl_noaction.xul]
-[test_tmpl_noactionuriattribute.xul]
-[test_tmpl_parentconditions.xul]
-[test_tmpl_parentcontenttag.xul]
-[test_tmpl_parentsimplesyntax.xul]
-[test_tmpl_query3triples.xul]
-[test_tmpl_query3tripleswherecontains.xul]
-[test_tmpl_querymember3tripleswhereequals.xul]
-[test_tmpl_querymemberandtwotriples.xul]
-[test_tmpl_querymembertriplemembertriple.xul]
-[test_tmpl_queryresourcematch.xul]
-[test_tmpl_queryreversetriple.xul]
-[test_tmpl_queryselfwithtriple.xul]
-[test_tmpl_querysetone.xul]
-[test_tmpl_querysettwo.xul]
-[test_tmpl_querysettwowithcondition.xul]
-[test_tmpl_querysyntax.xul]
-[test_tmpl_querysyntaxmultiplerules.xul]
-[test_tmpl_querysyntaxmultiplerulesfirstconditionall.xul]
-[test_tmpl_querysyntaxmultiplerulestwoconditions.xul]
-[test_tmpl_querytripleandmembermerge.xul]
-[test_tmpl_querytripleobjecttosubject.xul]
-[test_tmpl_querytwomembers.xul]
-[test_tmpl_querytwomembersfiltered.xul]
-[test_tmpl_querytwotriples.xul]
-[test_tmpl_queryupwardsmember.xul]
-[test_tmpl_queryupwardsmembertripleandfilteringtriple.xul]
-[test_tmpl_querywithemptyconditions.xul]
-[test_tmpl_referenceasmember.xul]
-[test_tmpl_regenerate.xul]
-[test_tmpl_selfgenerationextendedsyntax.xul]
-[test_tmpl_selfgenerationsimplesyntax.xul]
-[test_tmpl_simplesyntaxenclosedinacontainer.xul]
-[test_tmpl_simplesyntaxenclosedinacontainerwitharule.xul]
-[test_tmpl_simplesyntaxfilter.xul]
-[test_tmpl_simplesyntaxfilterwithmultiplerules.xul]
-[test_tmpl_simplesyntaxfilterwithrule.xul]
-[test_tmpl_simplesyntaxiteratingoverasinglevalue.xul]
-[test_tmpl_simplesyntaxusinganinterveningcontainer.xul]
-[test_tmpl_simplesyntaxusingatextnode.xul]
-[test_tmpl_simplesyntaxusingcontainerasthegenerationelement.xul]
-[test_tmpl_simplesyntaxusingdontrecurse.xul]
-[test_tmpl_simplesyntaxusingrecursivegeneration.xul]
-[test_tmpl_simplesyntaxusingrecursivegenerationagain.xul]
-[test_tmpl_simplesyntaxwithtwovariablesused.xul]
-[test_tmpl_simplevariablesubstitutioncaretsatbeginningandend.xul]
-[test_tmpl_simplevariablesubstitutioncaretsubstitution.xul]
-[test_tmpl_simplevariablesubstitutionnovariable.xul]
-[test_tmpl_simplevariablesubstitutionquestionmarkaspartofvariable.xul]
-[test_tmpl_simplevariablesubstitutionquestionmarksubstitution.xul]
-[test_tmpl_simplevariablesubstitutiontextandvariable.xul]
-[test_tmpl_simplevariablesubstitutionvariableandtextconcatenated.xul]
-[test_tmpl_simplevariablesubstitutionvariablesconcatenated.xul]
-[test_tmpl_sortascendinginteger.xul]
-[test_tmpl_sortascendingquerysyntax.xul]
-[test_tmpl_sortascendingtworulesquerysyntax.xul]
-[test_tmpl_sortascendingtworuleswithcontainerquerysyntax.xul]
-[test_tmpl_sortascendingtworuleswithdifferentcontainerquerysyntax.xul]
-[test_tmpl_sortdescendingquerysyntax.xul]
-[test_tmpl_sortquerymemberandtwotriples.xul]
-[test_tmpl_sortresource2descendingsimplesyntax.xul]
-[test_tmpl_sortresource2settopredicateascendingquerysyntax.xul]
-[test_tmpl_sortresource2settopredicatedescendingquerysyntax.xul]
-[test_tmpl_sortresourceascendingquerysyntax.xul]
-[test_tmpl_sortresourcedescendingquerysyntax.xul]
-[test_tmpl_sortresourcesettopredicateascendingquerysyntax.xul]
-[test_tmpl_sortresourcesettopredicatedescendingquerysyntax.xul]
-[test_tmpl_sorttworesourcesasstringsettopredicatedescendingquerysyntax.xul]
-[test_tmpl_sorttworesourcessettopredicateascendingquerysyntax.xul]
-[test_tmpl_sorttwovariablesascendingquerysyntax.xul]
-[test_tmpl_sorttwovariablesascendingsimplesyntax.xul]
-[test_tmpl_sorttwovariablesdescendingquerysyntax.xul]
-[test_tmpl_sortunknownascendingquerysyntax.xul]
-[test_tmpl_storage_bad_parameters.xul]
-[test_tmpl_storage_bad_parameters_2.xul]
-[test_tmpl_storage_bad_parameters_3.xul]
-[test_tmpl_storage_baddatasource.xul]
-[test_tmpl_storage_badquery.xul]
-[test_tmpl_storage_dynamicparameters.xul]
-[test_tmpl_storage_listbox.xul]
-[test_tmpl_storage_multiqueries.xul]
-[test_tmpl_storage_parameters.xul]
-[test_tmpl_storage_rule.xul]
-[test_tmpl_storage_simple.xul]
-[test_tmpl_storage_sortintegerasc.xul]
-[test_tmpl_storage_sortintegerdesc.xul]
-[test_tmpl_storage_sortstringasc.xul]
-[test_tmpl_storage_sortstringdesc.xul]
-[test_tmpl_storage_tree.xul]
-[test_tmpl_treeelementquerysyntax.xul]
-[test_tmpl_treeelementquerysyntaxnotrecursive.xul]
-[test_tmpl_treeelementquerysyntaxnotrecursivetreebuilder.xul]
-[test_tmpl_treeelementquerysyntaxrecursive.xul]
-[test_tmpl_treeelementquerysyntaxrecursivemultiplerules.xul]
-[test_tmpl_treeelementquerysyntaxrecursivemultiplerulestreebuilder.xul]
-[test_tmpl_treeelementquerysyntaxrecursivetreebuilder.xul]
-[test_tmpl_treeelementquerysyntaxtreebuilder.xul]
-[test_tmpl_treeelementsimplesyntaxnotrecursive.xul]
-[test_tmpl_treeelementsimplesyntaxnotrecursivetreebuilder.xul]
-[test_tmpl_treeelementsimplesyntaxrecursive.xul]
-[test_tmpl_treeelementsimplesyntaxrecursivetreebuilder.xul]
-[test_tmpl_treeelementtreecell.xul]
-[test_tmpl_treeelementtreecellsortascending.xul]
-[test_tmpl_treeelementtreecellsortascendingtreebuilder.xul]
-[test_tmpl_treeelementtreecelltreebuilder.xul]
-[test_tmpl_treeelementtreeitemonly.xul]
-[test_tmpl_treeelementtreeitemsortascending.xul]
-[test_tmpl_twogenerationnodes.xul]
-[test_tmpl_whereafterignorecase.xul]
-[test_tmpl_whereafterlowercase.xul]
-[test_tmpl_whereafternegation.xul]
-[test_tmpl_whereafteruppercase.xul]
-[test_tmpl_wherebeforeignorecase.xul]
-[test_tmpl_wherebeforelowercase.xul]
-[test_tmpl_wherebeforenegation.xul]
-[test_tmpl_wherebeforeuppercase.xul]
-[test_tmpl_wherecontains.xul]
-[test_tmpl_wherecontainsignorecase.xul]
-[test_tmpl_wherecontainsnegation.xul]
-[test_tmpl_wherecontainsnumber.xul]
-[test_tmpl_wherecontainsnumberstring.xul]
-[test_tmpl_wherecontainsresource.xul]
-[test_tmpl_wherecontainstwo.xul]
-[test_tmpl_whereendswith.xul]
-[test_tmpl_whereendswithignorecase.xul]
-[test_tmpl_whereendswithnegation.xul]
-[test_tmpl_whereequals.xul]
-[test_tmpl_whereequalsignorecase.xul]
-[test_tmpl_whereequalsmultiple.xul]
-[test_tmpl_whereequalsmultiplenegation.xul]
-[test_tmpl_whereequalsmultiplenegationignorecase.xul]
-[test_tmpl_whereequalsnegation.xul]
-[test_tmpl_whereequalsnegationignorecase.xul]
-[test_tmpl_whereequalsnegationwrongcase.xul]
-[test_tmpl_whereequalsnumber.xul]
-[test_tmpl_whereequalsothervariable.xul]
-[test_tmpl_whereequalsresource.xul]
-[test_tmpl_whereequalssamevariable.xul]
-[test_tmpl_whereequalswrongcase.xul]
-[test_tmpl_wheregreater.xul]
-[test_tmpl_wheregreaternegation.xul]
-[test_tmpl_wheregreaternegationstring.xul]
-[test_tmpl_wheregreaterstring.xul]
-[test_tmpl_whereless.xul]
-[test_tmpl_wherelessnegation.xul]
-[test_tmpl_wherelessnegationstring.xul]
-[test_tmpl_wherelessstring.xul]
-[test_tmpl_wherenorel.xul]
-[test_tmpl_wherenosubject.xul]
-[test_tmpl_wherenovalue.xul]
-[test_tmpl_wherestartswith.xul]
-[test_tmpl_wherestartswithignorecase.xul]
-[test_tmpl_wherestartswithmultiple.xul]
-[test_tmpl_wherestartswithnegation.xul]
-[test_tmpl_wherestartswithunknownvariable.xul]
-[test_tmpl_wherestartswithvariable.xul]
-[test_tmpl_wheresubjectequalsvariable.xul]
-[test_tmpl_wheresubjectstartswithvariable.xul]
-[test_tmpl_xmlquerysimple.xul]
-[test_tmpl_xmlquerywithassign.xul]
-[test_tmpl_xmlquerywithassignmentandcondition.xul]
-[test_tmpl_xmlquerywithassignmentandconditiondontrecurse.xul]
-[test_tmpl_xmlquerywithbindinginbindings.xul]
-[test_tmpl_xmlquerywithbindinginrule.xul]
-[test_tmpl_xmlquerywithdifferentmember.xul]
-[test_tmpl_xmlquerywithinlinedata.xul]
-[test_tmpl_xmlquerywithinlinedatawithmultiplequeries.xul]
-[test_tmpl_xmlquerywithmultiplequeries.xul]
-[test_tmpl_xmlquerywithothertypes.xul]
-[test_tmpl_xmlquerywithsort.xul]
-[test_tmpl_xmlquerywithsortotherfield.xul]
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/file_bug330010.rdf
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:s="urn:croczilla:xulsvg1:">
-  <rdf:Description about="urn:root">
-    <s:shapes>
-      <rdf:Bag>
-        <rdf:li>
-          <rdf:Description />
-        </rdf:li>
-      </rdf:Bag>
-    </s:shapes>
- </rdf:Description>
-</rdf:RDF>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/templates_shared.js
+++ /dev/null
@@ -1,488 +0,0 @@
-/**
- * This script is used for testing XUL templates. Call test_template within
- * a load event handler.
- *
- * A test should have a root node with the datasources attribute with the
- * id 'root', and a few global variables defined in the test's XUL file:
- *
- *  testid: the testid, used when outputting test results
- *  expectedOutput: e4x data containing the expected output. It can optionally
- *                  be enclosed in an <output> element as most tests generate
- *                  more than one node of output.
- *  isTreeBuilder: true for dont-build-content trees, false otherwise
- *  queryType: 'rdf', 'xml', etc.
- *  needsOpen: true for menu tests where the root menu must be opened before
- *             comparing results
- *  notWorkingYet: true if this test isn't working yet, outputs todo results
- *  notWorkingYetDynamic: true if the dynamic changes portion of the test
- *                        isn't working yet, outputs todo results
- *  changes: an array of functions to perform in sequence to test dynamic changes
- *           to the datasource.
- *
- * If the <output> element has an unordered attribute set to true, the
- * children within it must all appear to match, but may appear in any order.
- * If the unordered attribute is not set, the children must appear in the same
- * order.
- *
- * If the 'changes' array is used, it should be an array of functions. Each
- * function will be called in order and a comparison of the output will be
- * performed. This allows changes to be made to the datasource to ensure that
- * the generated template output has been updated. Within the expected output
- * XML, the step attribute may be set to a number on an element to indicate
- * that an element only applies before or after a particular change. If step
- * is set to a positive number, that element will only exist after that step in
- * the list of changes made. If step is set to a negative number, that element
- * will only exist until that step. Steps are numbered starting at 1. For
- * example:
- *   <label value="Cat"/>
- *   <label step="2" value="Dog"/>
- *   <label step="-5" value="Mouse"/>
- * The first element will always exist. The second element will only appear
- * after the second change is made. The third element will only appear until
- * the fifth change and it will no longer be present at later steps.
- *
- * If the anyid attribute is set to true on an element in the expected output,
- * then the value of the id attribute on that element is not compared for a
- * match. This is used, for example, for xml datasources, where the ids set on
- * the generated output are pseudo-random.
- */
-
-const ZOO_NS = "http://www.some-fictitious-zoo.com/";
-const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
-const debug = false;
-
-var expectedConsoleMessages = [];
-var expectLoggedMessages = null;
-
-function get_RDF() {
-  try {
-    return Components.classes["@mozilla.org/rdf/rdf-service;1"].
-             getService(Components.interfaces.nsIRDFService);
-  } catch (ex) { }
-}
-
-function get_ContainerUtils()
-{
-  try {
-    return Components.classes["@mozilla.org/rdf/container-utils;1"].
-             getService(Components.interfaces.nsIRDFContainerUtils);
-  } catch(ex) { }
-}
-
-const RDF = get_RDF();
-const ContainerUtils = get_ContainerUtils();
-
-var xmlDoc;
-
-function test_template()
-{
-  var root = document.getElementById("root");
-
-  var ds;
-  if (queryType == "rdf" && RDF) {
-    var ioService = Components.classes["@mozilla.org/network/io-service;1"].
-                      getService(Components.interfaces.nsIIOService);
-
-    var src = window.location.href.replace(/test_tmpl.*xul/, "animals.rdf");
-    ds = RDF.GetDataSourceBlocking(src);
-
-    if (expectLoggedMessages) {
-      Components.classes["@mozilla.org/consoleservice;1"].
-                 getService(Components.interfaces.nsIConsoleService).reset();
-    }
-
-    if (root.getAttribute("datasources") == "rdf:null")
-      root.setAttribute("datasources", "animals.rdf");
-  }
-  else if (queryType == "xml") {
-    var src = window.location.href.replace(/test_tmpl.*xul/, "animals.xml");
-    xmlDoc = new XMLHttpRequest();
-    xmlDoc.open("get", src, false);
-    xmlDoc.send(null);
-  }
-
-  // open menus if necessary
-  if (needsOpen)
-    root.open = true;
-
-  if (expectLoggedMessages)
-    expectLoggedMessages();
-
-  checkResults(root, 0);
-
-  if (changes.length) {
-    var usedds = ds;
-    // within these chrome tests, RDF datasources won't be modifiable unless
-    // an in-memory datasource is used instead. Call copyRDFDataSource to
-    // copy the datasource.
-    if (queryType == "rdf")
-      usedds = copyRDFDataSource(root, ds);
-    if (needsOpen)
-      root.open = true;
-    setTimeout(iterateChanged, 0, root, usedds);
-  }
-  else {
-    if (needsOpen)
-      root.open = false;
-    if (expectedConsoleMessages.length)
-      compareConsoleMessages();
-    SimpleTest.finish();
-  }
-}
-
-function iterateChanged(root, ds)
-{
-  Components.classes["@mozilla.org/consoleservice;1"].
-             getService(Components.interfaces.nsIConsoleService).reset();
-
-  for (var c = 0; c < changes.length; c++) {
-    changes[c](ds, root);
-    checkResults(root, c + 1);
-  }
-
-  if (needsOpen)
-    root.open = false;
-  if (expectedConsoleMessages.length)
-    compareConsoleMessages();
-  SimpleTest.finish();
-}
-
-function checkResults(root, step)
-{
-  var output = expectedOutput.cloneNode(true);
-  setForCurrentStep(output, step);
-
-  var error;
-  var actualoutput = root;
-  if (isTreeBuilder) {
-    // convert the tree's view data into the equivalent DOM structure
-    // for easier comparison
-    actualoutput = treeViewToDOM(root);
-    var treechildrenElements = [...output.children].filter((e) => e.localName === "treechildren");
-    error = compareOutput(actualoutput, treechildrenElements[0], false);
-  }
-  else {
-    error = compareOutput(actualoutput, output, true);
-  }
-
-  var adjtestid = testid;
-  if (step > 0)
-    adjtestid += " dynamic step " + step;
-
-  var stilltodo = ((step == 0 && notWorkingYet) || (step > 0 && notWorkingYetDynamic));
-  if (stilltodo)
-    todo(false, adjtestid);
-  else
-    ok(!error, adjtestid);
-
-  if ((!stilltodo && error) || debug) {
-    // for debugging, serialize the XML output
-    var serializedXML = "";
-    var rootNodes = actualoutput.childNodes;
-    for (var n = 0; n < rootNodes.length; n++) {
-      var node = rootNodes[n];
-      if (node.localName != "template")
-        serializedXML += ((new XMLSerializer()).serializeToString(node));
-    }
-
-    // remove the XUL namespace declarations to make the output more readable
-    const nsrepl = new RegExp("xmlns=\"" + XUL_NS + "\" ", "g");
-    serializedXML = serializedXML.replace(nsrepl, "");
-    if (debug)
-      dump("-------- " + adjtestid + "  " + error + ":\n" + serializedXML + "\n");
-    if (!stilltodo && error)
-      is(serializedXML, "Same", "Error is: " + error);
-  }
-}
-
-/**
- * Adjust the expected output to acccount for any step attributes.
- */
-function setForCurrentStep(content, currentStep)
-{
-  var todelete = [];
-  for (var child of content.childNodes) {
-    if (child.nodeType === Node.ELEMENT_NODE) {
-      var stepstr = child.getAttribute("step") || "";
-      var stepsarr = stepstr.split(",");
-      for (var s = 0; s < stepsarr.length; s++) {
-        var step = parseInt(stepsarr[s]);
-        if ((step > 0 && step > currentStep) ||
-            (step < 0 && -step <= currentStep)) {
-          todelete.push(child);
-        }
-      }
-    } else if (child.nodeType === Node.TEXT_NODE) {
-      // Drop empty text nodes.
-      if (child.nodeValue.trim() === "")
-        todelete.push(child);
-    }
-  }
-
-  for (var e of todelete)
-    content.removeChild(e);
-
-  for (var child of content.children) {
-    child.removeAttribute("step");
-    setForCurrentStep(child, currentStep);
-  }
-}
-
-/**
- * Compares the 'actual' DOM output with the 'expected' output. This function
- * is called recursively, with isroot true if actual refers to the root of the
- * template. Returns a null string if they are equal and an error string if
- * they are not equal. This function is called recursively as it iterates
- * through each node in the DOM tree.
- */
-function compareOutput(actual, expected, isroot)
-{
-  if (isroot && expected.localName != "data")
-    return "expected must be a <data> element";
-
-  var t;
-
-  // compare text nodes
-  if (expected.nodeType == Node.TEXT_NODE) {
-    if (actual.nodeValue !== expected.nodeValue.trim())
-      return "Text " + actual.nodeValue + " doesn't match " + expected.nodeValue;
-    return "";
-  }
-
-  if (!isroot) {
-    var anyid = false;
-    // make sure that the tags match
-    if (actual.localName != expected.localName)
-      return "Tag name " + expected.localName + " not found";
-
-    // loop through the attributes in the expected node and compare their
-    // values with the corresponding attribute on the actual node
-
-    var expectedAttrs = expected.attributes;
-    for (var a = 0; a < expectedAttrs.length; a++) {
-      var attr = expectedAttrs[a];
-      var expectval = attr.value;
-      // skip checking the id when anyid="true", however make sure to
-      // ensure that the id is actually present.
-      if (attr.name == "anyid" && expectval == "true") {
-        anyid = true;
-        if (!actual.hasAttribute("id"))
-          return "expected id attribute";
-      }
-      else if (actual.getAttribute(attr.name) != expectval) {
-        return "attribute " + attr.name + " is '" +
-               actual.getAttribute(attr.name) + "' instead of '" + expectval + "'";
-      }
-    }
-
-    // now loop through the actual attributes and make sure that there aren't
-    // any extra attributes that weren't expected
-    var length = actual.attributes.length;
-    for (t = 0; t < length; t++) {
-      var aattr = actual.attributes[t];
-      var expectval = expected.getAttribute(aattr.name);
-      // ignore some attributes that don't matter
-      if (expectval != actual.getAttribute(aattr.name) &&
-          aattr.name != "staticHint" && aattr.name != "xmlns" &&
-          (aattr.name != "id" || !anyid))
-        return "extra attribute " + aattr.name;
-    }
-  }
-
-  // ensure that the node has the right number of children. Subtract one for
-  // the root node to account for the <template> node.
-  length = actual.childNodes.length - (isroot ? 1 : 0);
-  if (length != expected.childNodes.length)
-    return "incorrect child node count of " + actual.localName + " " + length +
-           " expected " + expected.childNodes.length;
-
-  // if <data unordered="true"> is used, then the child nodes may be in any order
-  var unordered = (expected.localName == "data" && expected.getAttribute("unordered") == "true");
-
-  // next, loop over the children and call compareOutput recursively on each one
-  var adj = 0;
-  for (t = 0; t < actual.childNodes.length; t++) {
-    var actualnode = actual.childNodes[t];
-    // skip the <template> element, and add one to the indices when looking
-    // at the later nodes to account for it
-    if (isroot && actualnode.localName == "template") {
-      adj++;
-    }
-    else {
-      var output = "unexpected";
-      if (unordered) {
-        var expectedChildren = expected.childNodes;
-        for (var e = 0; e < expectedChildren.length; e++) {
-          output = compareOutput(actualnode, expectedChildren[e], false);
-          if (!output)
-            break;
-        }
-      }
-      else {
-        output = compareOutput(actualnode, expected.childNodes[t - adj], false);
-      }
-
-      // an error was returned, so return early
-      if (output)
-        return output;
-    }
-  }
-
-  return "";
-}
-
-/*
- * copy the datasource into an in-memory datasource so that it can be modified
- */
-function copyRDFDataSource(root, sourceds)
-{
-  var dsourcesArr = [];
-  var composite = root.database;
-  var dsources = composite.GetDataSources();
-  while (dsources.hasMoreElements()) {
-    sourceds = dsources.getNext().QueryInterface(Components.interfaces.nsIRDFDataSource);
-    dsourcesArr.push(sourceds);
-  }
-
-  for (var d = 0; d < dsourcesArr.length; d++)
-    composite.RemoveDataSource(dsourcesArr[d]);
-
-  var newds = Components.classes["@mozilla.org/rdf/datasource;1?name=in-memory-datasource"].
-                createInstance(Components.interfaces.nsIRDFDataSource);
-
-  var sourcelist = sourceds.GetAllResources();
-  while (sourcelist.hasMoreElements()) {
-    var source = sourcelist.getNext();
-    var props = sourceds.ArcLabelsOut(source);
-    while (props.hasMoreElements()) {
-      var prop = props.getNext();
-      if (prop instanceof Components.interfaces.nsIRDFResource) {
-        var targets = sourceds.GetTargets(source, prop, true);
-        while (targets.hasMoreElements())
-          newds.Assert(source, prop, targets.getNext(), true);
-      }
-    }
-  }
-
-  composite.AddDataSource(newds);
-  root.builder.rebuild();
-
-  return newds;
-}
-
-/**
- * Converts a tree view (nsITreeView) into the equivalent DOM tree.
- * Returns the treechildren
- */
-function treeViewToDOM(tree)
-{
-  var treechildren = document.createElement("treechildren");
-
-  if (tree.view)
-    treeViewToDOMInner(tree.columns, treechildren, tree.view, tree.builder, 0, 0);
-
-  return treechildren;
-}
-
-function treeViewToDOMInner(columns, treechildren, view, builder, start, level)
-{
-  var end = view.rowCount;
-
-  for (var i = start; i < end; i++) {
-    if (view.getLevel(i) < level)
-      return i - 1;
-
-    var id = builder ? builder.getResourceAtIndex(i).Value : "id" + i;
-    var item = document.createElement("treeitem");
-    item.setAttribute("id", id);
-    treechildren.appendChild(item);
-
-    var row = document.createElement("treerow");
-    item.appendChild(row);
-
-    for (var c = 0; c < columns.length; c++) {
-      var cell = document.createElement("treecell");
-      var label = view.getCellText(i, columns[c]);
-      if (label)
-        cell.setAttribute("label", label);
-      row.appendChild(cell);
-    }
-
-    if (view.isContainer(i)) {
-      item.setAttribute("container", "true");
-      item.setAttribute("empty", view.isContainerEmpty(i) ? "true" : "false");
-
-      if (!view.isContainerEmpty(i) && view.isContainerOpen(i)) {
-        item.setAttribute("open", "true");
-
-        var innertreechildren = document.createElement("treechildren");
-        item.appendChild(innertreechildren);
-
-        i = treeViewToDOMInner(columns, innertreechildren, view, builder, i + 1, level + 1);
-      }
-    }
-  }
-
-  return i;
-}
-
-function expectConsoleMessage(ref, id, isNew, isActive, extra)
-{
-  var message = "In template with id root" +
-                (ref ? " using ref " + ref : "") + "\n    " +
-                (isNew ? "New " : "Removed ") + (isActive ? "active" : "inactive") +
-                " result for query " + extra + ": " + id;
-  expectedConsoleMessages.push(message);
-}
-
-function compareConsoleMessages()
-{
-  var consoleService = Components.classes["@mozilla.org/consoleservice;1"].
-                         getService(Components.interfaces.nsIConsoleService);
-  var messages = consoleService.getMessageArray() || [];
-  messages = messages.map(m => m.message);
-  // Copy to avoid modifying expectedConsoleMessages
-  var expect = expectedConsoleMessages.concat();
-  for (var m = 0; m < messages.length; m++) {
-    if (messages[m] == expect[0]) {
-      ok(true, "found message " + expect.shift());
-    }
-  }
-  if (expect.length != 0) {
-    ok(false, "failed to find expected console messages: " + expect);
-  }
-}
-
-function copyToProfile(filename)
-{
-  if (Cc === undefined) {
-    var Cc = Components.classes;
-    var Ci = Components.interfaces;
-  }
-
-  var loader = Cc["@mozilla.org/moz/jssubscript-loader;1"]
-                         .getService(Ci.mozIJSSubScriptLoader);
-  loader.loadSubScript("chrome://mochikit/content/chrome-harness.js");
-
-  var file = Cc["@mozilla.org/file/directory_service;1"]
-                       .getService(Ci.nsIProperties)
-                       .get("ProfD", Ci.nsIFile);
-  file.append(filename);
-
-  var parentURI = getResolvedURI(getRootDirectory(window.location.href));
-  if (parentURI.JARFile) {
-    parentURI = extractJarToTmp(parentURI);
-  } else {
-    var fileHandler = Cc["@mozilla.org/network/protocol;1?name=file"].
-                      getService(Ci.nsIFileProtocolHandler);
-    parentURI = fileHandler.getFileFromURLSpec(parentURI.spec);
-  }
-
-  parentURI = parentURI.QueryInterface(Ci.nsIFile);
-  parentURI.append(filename);
-  try {
-    var retVal = parentURI.copyToFollowingLinks(file.parent, filename);
-  } catch (ex) {
-    //ignore this error as the file could exist already
-  }
-}
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_bug329335.xul
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
-
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        xmlns:svg="http://www.w3.org/2000/svg">
-
-  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
-  <script>
-
-  SimpleTest.waitForExplicitFinish();
-
-  function init()
-  {
-    document.documentElement.appendChild(document.getElementById("svg"));
-    ok(true, "Didn't crash");
-    SimpleTest.finish();
-  }
-
-  window.addEventListener("load", init, false);
-
-  </script>
-
-
-  <svg:svg datasources="" id="svg"/>
-
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_bug330010.xul
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        xmlns:svg="http://www.w3.org/2000/svg"
-        xmlns:html="http://www.w3.org/1999/xhtml"
-        onload="boom();">
-<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
-<script type="text/javascript">
-<![CDATA[
-
-SimpleTest.waitForExplicitFinish();
-function boom()
-{
-  const RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].
-                         getService(Components.interfaces.nsIRDFService);
-  var src = window.location.href.replace(/test_bug330010.xul/, "file_bug330010.rdf");
-
-  var ds = RDF.GetDataSourceBlocking(src);
-
-  var s = document.getElementById("s");
-  s.setAttribute("datasources", "file_bug330010.rdf");
-
-  var x = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "hbox");
-  var generatedShape = s.childNodes[3];
-  generatedShape.appendChild(x);
-  document.documentElement.removeChild(document.getElementById("s"));
-  ok(true, "Didn't crash");
-  SimpleTest.finish();
-}
-
-]]>
-</script>
-
-  <html:div datasources="rdf:null" ref="urn:root" flex="1" id="s">
-    <template>
-      <rule>
-        <conditions>
-          <content uri="?root"/>
-          <triple subject="?root"
-                  predicate="urn:croczilla:xulsvg1:shapes"
-                  object="?shapes"/>
-          <member container="?shapes" child="?shape" id="m"/>
-        </conditions>
-        <action>
-          <hbox id="p" uri="?shape" />
-       </action>
-     </rule>
-   </template>
- </html:div>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_bug397148.xul
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml" onload="boom();">
-<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
-
-<script type="text/javascript">
-SimpleTest.waitForExplicitFinish();
-
-function boom() {
-  ok(true, "Didn't crash");
-  SimpleTest.finish();
-}
-</script>
-
-
-<html:span datasources="0" />
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_bug441785.xul
+++ /dev/null
@@ -1,148 +0,0 @@
-<?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"?>
-
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-   <tree flex="20" id="t" ref="urn:data:row" datasources="rdf:null" seltype="single">
-     <treecols> 
-      <treecol flex="1" id="id" label="id" sort="rdf:http://dummy/rdf#id" />
-      <splitter class="tree-splitter"/>
-      <treecol flex="1" id="title" label="title" sort="rdf:http://dummy/rdf#title" sortActive="true" sortDirection="ascending" /><splitter class="tree-splitter"/>
-     </treecols>
-     <template>
-       <treechildren>
-         <treeitem uri="rdf:*" seltype="single">
-           <treerow >
-             <treecell label="rdf:http://dummy/rdf#id"/>
-             <treecell label="rdf:http://dummy/rdf#title"/>
-           </treerow>
-         </treeitem>
-       </treechildren>
-     </template>
-   </tree>
-   <tree flex="20" id="tc" ref="urn:data:row" datasources="rdf:null" seltype="single" flags="dont-build-content">
-     <treecols> 
-      <treecol flex="1" id="idc" label="id" sort="rdf:http://dummy/rdf#id" />
-      <splitter class="tree-splitter"/>
-      <treecol flex="1" id="titlec" label="title" sort="rdf:http://dummy/rdf#title" sortActive="true" sortDirection="ascending" /><splitter class="tree-splitter"/>
-     </treecols>
-     <template>
-       <treechildren>
-         <treeitem uri="rdf:*" seltype="single">
-           <treerow >
-             <treecell label="rdf:http://dummy/rdf#id"/>
-             <treecell label="rdf:http://dummy/rdf#title"/>
-           </treerow>
-         </treeitem>
-       </treechildren>
-     </template>
-   </tree>
-
-<body xmlns="http://www.w3.org/1999/xhtml" style="height: 300px; overflow: auto;"/>
-
-<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>      
-
-<script type="application/x-javascript">
-<![CDATA[
-
-var buildCount = 0;
-
-SimpleTest.waitForExplicitFinish();
-
-var TemplateBuilderListener = {
-  willRebuild: function(aBuilder) {
-  },
-
-  didRebuild: function(aBuilder) {
-  ++buildCount;
-    var remove = false;
-    if (buildCount == 2) {
-      remove =true;
-      setTimeout(nextDataSource, 0);
-    } else if (buildCount == 4) {
-      remove = true;
-      setTimeout(continueTest, 0);
-    }
-    if (remove) {
-      var tree = document.getElementById('t');
-      var treec = document.getElementById('tc');
-      tree.builder.removeListener(TemplateBuilderListener);
-      treec.builder.removeListener(TemplateBuilderListener);
-    }
-  },
-
-  QueryInterface: function (aIID)
-  {
-    if (!aIID.equals(Components.interfaces.nsIXULBuilderListener) &&
-        !aIID.equals(Components.interfaces.nsISupports))
-      throw Components.results.NS_ERROR_NO_INTERFACE;
-    return this;
-  }
-};
-
-function runTest() {
-  var tree = document.getElementById('t');
-  var treec = document.getElementById('tc');
-
-  try {
-    var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].
-                       getService(Components.interfaces.nsIRDFService);
-
-    var s1 = window.location.href.replace(/test_bug441785.xul/, "bug441785-1.rdf");
-    var ds1 = rdfService.GetDataSourceBlocking(s1);
-
-    var s2 = window.location.href.replace(/test_bug441785.xul/, "bug441785-2.rdf");
-    var ds2 = rdfService.GetDataSourceBlocking(s2);
-  } catch (ex) { }
-
-  tree.builder.addListener(TemplateBuilderListener);
-  treec.builder.addListener(TemplateBuilderListener);
-  tree.setAttribute('datasources', 'bug441785-1.rdf');
-  treec.setAttribute('datasources', 'bug441785-1.rdf');
-}
-
-var oldtreefirstrow, oldtreecfirstrow;
-
-function nextDataSource()
-{
-  var tree = document.getElementById('t');
-  var treec = document.getElementById('tc');
-  tree.treeBoxObject.scrollToRow(10);
-  treec.treeBoxObject.scrollToRow(10);
-
-  is(tree.treeBoxObject.getFirstVisibleRow(), 10, "first tree row count datasource 1");
-  is(treec.treeBoxObject.getFirstVisibleRow(), 10, "second tree row count datasource 1");
-
-  tree.builder.addListener(TemplateBuilderListener);
-  treec.builder.addListener(TemplateBuilderListener);
-  tree.setAttribute('datasources', 'bug441785-2.rdf');
-  treec.setAttribute('datasources', 'bug441785-2.rdf');
-}
-
-function continueTest() {
-  var tree = document.getElementById('t');
-  var treec = document.getElementById('tc');
-
-  is(tree.treeBoxObject.getFirstVisibleRow(), 0, "first tree row count datasource 2");
-  is(treec.treeBoxObject.getFirstVisibleRow(), 0, "second tree row count datasource 2");
-
-  try {
-    window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
-            .getInterface(Components.interfaces.nsIDOMWindowUtils)
-            .garbageCollect();
-  } 
-  catch (e) { }
-
-  // Hit the bug, crash 
-  // (not exactly the same kind of crash as 441785, but from the same cause)
-  tree.remove();
-  treec.remove();
-
-  SimpleTest.finish();
-}
-
-window.addEventListener("load", runTest, false);
-
-]]>
-</script>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_bug476634.xul
+++ /dev/null
@@ -1,76 +0,0 @@
-<?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"?>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=476634
--->
-<window title="Mozilla Bug 476634" onload="startup()"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <script type="application/javascript" 
-          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>      
-
-<body  xmlns="http://www.w3.org/1999/xhtml">
-<a target="_blank" 
-   href="https://bugzilla.mozilla.org/show_bug.cgi?id=304188">Mozilla Bug 476634</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-</pre>
-</body>
-<template id="test-template">
-  <query>SELECT id,value FROM test</query>
-  <action>
-    <label uri="?" id="?id" value="?value"/>
-  </action>
-</template>
-<vbox id="results-list" datasources="rdf:null" querytype="storage" ref="*"
-      template="test-template"/>
-
-<script class="testbody" type="application/javascript">
-<![CDATA[
-function startup() {
-  var ss = Components.classes["@mozilla.org/storage/service;1"]
-                     .getService(Components.interfaces.mozIStorageService);
-  var db = ss.openSpecialDatabase("memory");
-  
-  db.createTable("test", "id TEXT, value INTEGER");
-  var stmt = db.createStatement("INSERT INTO test (id, value) VALUES (?,?)");
-  stmt.bindByIndex(0, "test1");
-  stmt.bindByIndex(1, 0);
-  stmt.execute();
-  stmt.bindByIndex(0, "test2");
-  stmt.bindByIndex(1, 2147483647);
-  stmt.execute();
-  stmt.bindByIndex(0, "test3");
-  stmt.bindByIndex(1, -2147483648);
-  stmt.execute();
-  stmt.bindByIndex(0, "test4");
-  stmt.bindByIndex(1, 0);
-  stmt.execute();
-  stmt.bindByIndex(0, "test5");
-  stmt.bindByIndex(1, 3147483647);
-  stmt.execute();
-  stmt.bindByIndex(0, "test6");
-  stmt.bindByIndex(1, -3147483648);
-  stmt.execute();
-  stmt.finalize();
-
-  var list = document.getElementById("results-list");
-  list.builder.datasource = db;
-
-  is(list.childNodes.length, 6, "Should be 6 generated elements");
-  is(list.childNodes[0].value, "0", "Should have seen the correct value");
-  is(list.childNodes[1].value, "2147483647", "Should have seen the correct value");
-  is(list.childNodes[2].value, "-2147483648", "Should have seen the correct value");
-  is(list.childNodes[3].value, "0", "Should have seen the correct value");
-  is(list.childNodes[4].value, "3147483647", "Should have seen the correct value");
-  is(list.childNodes[5].value, "-3147483648", "Should have seen the correct value");
-}
-]]>
-</script>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_sortservice.xul
+++ /dev/null
@@ -1,70 +0,0 @@
-<?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"?>
-
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<vbox id="box"/>
-
-<body xmlns="http://www.w3.org/1999/xhtml" style="height: 300px; overflow: auto;"/>
-
-<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>      
-
-<script type="application/x-javascript">
-<![CDATA[
-
-var tests = [
-  [["One", "Two", "Three", "Four"], "", "Four One Three Two"],
-  [["One", "Two", "Three", "Four"], "integer", "Four One Three Two"],
-  [["One", "Two", "Three", "Four"], "descending", "Two Three One Four"],
-  [["One", "Two", "Three", "Four"], "descending integer", "Two Three One Four"],
-  [["One", "Two", "Three", "Four"], "integer cat descending", "Two Three One Four"],
-  [["1", "13", "2", "7", "12", "240", "2", "170", "222", "98"], "", "1 12 13 170 2 2 222 240 7 98"],
-  [["1", "13", "2", "7", "12", "240", "2", "170", "222", "98"], "integer", "1 2 2 7 12 13 98 170 222 240"],
-  [["1", "13", "2", "7", "12", "240", "2", "170", "222", "98"], "ascending integer", "1 2 2 7 12 13 98 170 222 240"],
-  [["1", "13", "2", "7", "12", "240", "2", "170", "222", "98"], "integer descending", "240 222 170 98 13 12 7 2 2 1"],
-  [["Cat", "cat", "Candy", "candy"], "comparecase", "Candy Cat candy cat"],
-  [["1", "102", "22", "One", "40", "Two"], "integer", "1 22 40 102 One Two"],
-];
-
-SimpleTest.waitForExplicitFinish();
-
-function doTests()
-{
-  var box = document.getElementById("box");
-
-  const sortService = Components.classes["@mozilla.org/xul/xul-sort-service;1"].
-                        getService(Components.interfaces.nsIXULSortService);
-
-  for (let t = 0; t < tests.length; t++) {
-    var test = tests[t];
-
-    for (let e = 0; e < test[0].length; e++) {
-      var label = document.createElement("label");
-      label.setAttribute("value", test[0][e]);
-      box.appendChild(label);
-    }
-
-    sortService.sort(box, "value", test[1]);
-
-    var actual = "";
-    for (let e = 0; e < box.childNodes.length; e++) {
-      if (actual)
-        actual += " ";
-      actual += box.childNodes[e].getAttribute("value");
-    }
-    is(actual, test[2], "sorted step " + (t + 1));
-
-    while(box.hasChildNodes())
-      box.firstChild.remove();
-    box.removeAttribute("sortDirection");
-  }
-
-  SimpleTest.finish();
-}
-
-window.addEventListener("load", doTests, false);
-
-]]>
-</script>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_bindingsextendedsyntax.xul
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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"?>
-
-<!--
-  bindings - extended syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-2" id="http://www.some-fictitious-zoo.com/humans/sarah" value="Sarah "/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/humans/sarah" value="Sarah Yarmouth"/>
-    <label step="-1" id="http://www.some-fictitious-zoo.com/humans/robert" value="Robert Sanderson"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/humans/robert" value="Robert "/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="bindings - extended syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    targetds.Unassert(RDF.GetResource(ZOO_NS + 'humans/robert'),
-                      RDF.GetResource(ZOO_NS + 'rdf#lastName'),
-                      RDF.GetLiteral('Sanderson'), true);
-  },
-  // step 2
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'humans/sarah'),
-                    RDF.GetResource(ZOO_NS + 'rdf#lastName'),
-                    RDF.GetLiteral('Yarmouth'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans">
-<template id="template">
-<rule>
-<conditions>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<bindings>
-<binding subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#lastName" object="?lastname"/>
-</bindings>
-<action>
-<label uri="?child" value="?name ?lastname"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_bindingsmultiple.xul
+++ /dev/null
@@ -1,80 +0,0 @@
-<?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"?>
-
-<!--
-  bindings - multiple
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button id="http://www.some-fictitious-zoo.com/arachnids" container="true" empty="false" label="Arachnids  "/>
-    <button step="-2" id="http://www.some-fictitious-zoo.com/birds" container="true" empty="false" label="Birds Sarah "/>
-    <button step="2" id="http://www.some-fictitious-zoo.com/birds" container="true" empty="false" label="Birds Sarah Yarmouth"/>
-    <button step="-1" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true" label="Crustaceans Robert Sanderson"/>
-    <button step="1" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true" label="Crustaceans Robert "/>
-    <button id="http://www.some-fictitious-zoo.com/fish" container="true" empty="false" label="Fish  "/>
-    <button id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" label="Mammals  "/>
-    <button step="-1" id="http://www.some-fictitious-zoo.com/reptiles" container="true" empty="false" label="Reptiles Robert Sanderson"/>
-    <button step="1" id="http://www.some-fictitious-zoo.com/reptiles" container="true" empty="false" label="Reptiles Robert "/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="bindings - multiple";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    targetds.Unassert(RDF.GetResource(ZOO_NS + 'humans/robert'),
-                      RDF.GetResource(ZOO_NS + 'rdf#lastName'),
-                      RDF.GetLiteral('Sanderson'), true);
-  },
-  // step 2
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'humans/sarah'),
-                    RDF.GetResource(ZOO_NS + 'rdf#lastName'),
-                    RDF.GetLiteral('Yarmouth'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/all-animals">
-<template>
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-</query>
-<rule>
-<bindings>
-<binding subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#keeper" object="?keeper"/>
-<binding subject="?keeper" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?keepername"/>
-<binding subject="?keeper" predicate="http://www.some-fictitious-zoo.com/rdf#lastName" object="?lastname"/>
-<binding subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</bindings>
-<action>
-<button uri="?child" label="?name ?keepername ?lastname"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_bindingsquerysyntax.xul
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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"?>
-
-<!--
-  bindings - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-2" id="http://www.some-fictitious-zoo.com/humans/sarah" value="First Name: Sarah  Last Name: "/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/humans/sarah" value="First Name: Sarah  Last Name: Yarmouth"/>
-    <label step="-1" id="http://www.some-fictitious-zoo.com/humans/robert" value="First Name: Robert  Last Name: Sanderson"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/humans/robert" value="First Name: Robert  Last Name: "/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="bindings - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    targetds.Unassert(RDF.GetResource(ZOO_NS + 'humans/robert'),
-                      RDF.GetResource(ZOO_NS + 'rdf#lastName'),
-                      RDF.GetLiteral('Sanderson'), true);
-  },
-  // step 2
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'humans/sarah'),
-                    RDF.GetResource(ZOO_NS + 'rdf#lastName'),
-                    RDF.GetLiteral('Yarmouth'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans">
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule id="rule">
-<bindings id="bindings">
-<binding subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#lastName" object="?lastname"/>
-</bindings>
-<action>
-<label uri="?child" value="First Name: ?name  Last Name: ?lastname"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_bindingsreversed.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-  bindings - reversed
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/humans/sarah" value="First Name: Sarah  Last Name: "/>
-    <label id="http://www.some-fictitious-zoo.com/humans/robert" value="First Name: Robert  Last Name: "/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="bindings - reversed";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans">
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule id="rule">
-<bindings id="bindings">
-<binding subject="?lastname" predicate="http://www.some-fictitious-zoo.com/rdf#lastName" object="?child"/>
-</bindings>
-<action>
-<label uri="?child" value="First Name: ?name  Last Name: ?lastname"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_bindingssameastriple.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-  bindings - same as triple
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/humans/sarah" value="First Name: Sarah  Last Name: "/>
-    <label id="http://www.some-fictitious-zoo.com/humans/robert" value="First Name: Robert  Last Name: "/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="bindings - same as triple";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans">
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule id="rule">
-<bindings id="bindings">
-<binding subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</bindings>
-<action>
-<label uri="?child" value="First Name: ?name  Last Name: ?lastname"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_containerandmembervariablechanged.xul
+++ /dev/null
@@ -1,88 +0,0 @@
-<?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"?>
-
-<!--
-  container and member variable changed
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button step="3" id="http://www.some-fictitious-zoo.com/birds/wren" label="http://www.some-fictitious-zoo.com/birds http://www.some-fictitious-zoo.com/birds/wren"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/emu" label="http://www.some-fictitious-zoo.com/birds http://www.some-fictitious-zoo.com/birds/emu"/>
-    <button step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="http://www.some-fictitious-zoo.com/birds http://www.some-fictitious-zoo.com/birds/barnowl"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/raven" label="http://www.some-fictitious-zoo.com/birds http://www.some-fictitious-zoo.com/birds/raven"/>
-    <button step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" label="http://www.some-fictitious-zoo.com/birds http://www.some-fictitious-zoo.com/birds/archaeopteryx"/>
-    <button step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" label="http://www.some-fictitious-zoo.com/birds http://www.some-fictitious-zoo.com/birds/emperorpenguin"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="container and member variable changed";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template container="?parent" member="?child">
-<rule>
-<button uri="?" label="?parent ?child"/>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_containervariablechanged.xul
+++ /dev/null
@@ -1,49 +0,0 @@
-<?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"?>
-
-<!--
-  container variable changed
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button id="http://www.some-fictitious-zoo.com/birds/emu" label="http://www.some-fictitious-zoo.com/birds "/>
-    <button id="http://www.some-fictitious-zoo.com/birds/barnowl" label="http://www.some-fictitious-zoo.com/birds "/>
-    <button id="http://www.some-fictitious-zoo.com/birds/raven" label="http://www.some-fictitious-zoo.com/birds "/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="container variable changed";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template container="?parent">
-<rule>
-<button uri="?" label="?parent ?child"/>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_containmentattribute.xul
+++ /dev/null
@@ -1,71 +0,0 @@
-<?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"?>
-
-<!--
-  containment attribute
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" unordered="true">
-    <checkbox step="-1" id="http://www.some-fictitious-zoo.com/arachnids/tarantula" label="Tarantula"/>
-    <checkbox step="2" id="http://www.some-fictitious-zoo.com/mammals/lion" label="Lion"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/reptiles/anaconda" label="Anaconda"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/reptiles/chameleon" label="Chameleon"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/africanelephant" label="African Elephant"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="containment attribute";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    targetds.Unassert(RDF.GetResource(ZOO_NS + 'humans/robert'),
-                      RDF.GetResource(ZOO_NS + 'rdf#favoriteAnimal'),
-                      RDF.GetResource(ZOO_NS + 'arachnids/tarantula'), true);
-  },
-  // step 2
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'humans/robert'),
-                    RDF.GetResource(ZOO_NS + 'rdf#favoriteAnimal'),
-                    RDF.GetResource(ZOO_NS + 'mammals/lion'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans/robert" containment="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal">
-<template id="template">
-<rule id="rule">
-<conditions>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action>
-<checkbox uri="?child" label="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_defaultcontainervariableisuri.xul
+++ /dev/null
@@ -1,49 +0,0 @@
-<?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"?>
-
-<!--
-  default container variable is ?uri
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button id="http://www.some-fictitious-zoo.com/birds/emu" label="http://www.some-fictitious-zoo.com/birds"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/barnowl" label="http://www.some-fictitious-zoo.com/birds"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/raven" label="http://www.some-fictitious-zoo.com/birds"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="default container variable is ?uri";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template>
-<rule>
-<button uri="?uri" label="?uri"/>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_errors.xul
+++ /dev/null
@@ -1,280 +0,0 @@
-<?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"?>
-
-<!--
-  tests for templates with invalid syntax
--->
-
-<window title="XUL Invalid Template Tests" width="500" height="600"
-        onload="runTest();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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();
-
-var consoleService = Components.classes["@mozilla.org/consoleservice;1"].
-                       getService(Components.interfaces.nsIConsoleService);
-
-function checkConsole(expectedError)
-{
-  var message = consoleService.getMessageArray()[0].message;
-  is(message, expectedError, "logged message " + expectedError);
-}
-
-// each test consists of a pre function executed before the template build, an
-// expected error message, and a post function executed after the template build
-var tests = [
-
-// <queryset> used in invalid location
-{
-  pre: template => template.insertBefore(document.createElement("queryset"), template.lastChild),
-  error: "Error parsing template: unexpected <queryset> element",
-  post: queryset => queryset.remove()
-},
-
-// no member variable found
-{
-  pre: template => $("action").firstChild.removeAttribute("uri"),
-  error: "Error parsing template: no member variable found. Action body should have an element with uri attribute",
-  post: () => $("action").firstChild.setAttribute("uri", "?child")
-},
-
-// bad binding subject
-{
-  pre: template => $("binding").removeAttribute("subject"),
-  error: "Error parsing template: <binding> requires a variable for its subject attribute",
-  post: () => $("binding").setAttribute("subject", "?child"),
-},
-
-// bad binding predicate
-{
-  pre: template => $("binding").removeAttribute("predicate"),
-  error: "Error parsing template: <binding> element is missing a predicate attribute",
-  post: () => $("binding").setAttribute("predicate", "http://www.some-fictitious-zoo.com/rdf#name"),
-},
-
-// bad binding object
-{
-  pre: template => $("binding").setAttribute("object", "blah"),
-  error: "Error parsing template: <binding> requires a variable for its object attribute",
-  post: () => $("binding").setAttribute("object", "?name"),
-},
-
-// where condition missing a subject
-{
-  pre: function(template) { var rule = $("rule");
-                            var where = document.createElement("where");
-                            where.setAttribute("subject", "");
-                            where.setAttribute("rel", "equals");
-                            where.setAttribute("value", "Raven");
-                            rule.appendChild(where);
-                            return where; },
-  error: "Error parsing template: <where> element is missing a subject attribute",
-  post: function(where) { where.remove(); }
-},
-
-// where condition missing a rel
-{
-  pre: function(template) { var rule = $("rule");
-                            var where = document.createElement("where");
-                            where.setAttribute("subject", "?name");
-                            where.setAttribute("rel", "");
-                            where.setAttribute("value", "Raven");
-                            rule.appendChild(where);
-                            return where; },
-  error: "Error parsing template: <where> element is missing a rel attribute",
-  post: function(where) { where.remove(); }
-},
-
-// where condition missing a value
-{
-  pre: function(template) { var rule = $("rule");
-                            var where = document.createElement("where");
-                            where.setAttribute("subject", "?name");
-                            where.setAttribute("rel", "equals");
-                            where.setAttribute("value", "");
-                            rule.appendChild(where);
-                            return where; },
-  error: "Error parsing template: <where> element is missing a value attribute",
-  post: function(where) { where.remove(); }
-},
-
-// where condition missing a variable
-{
-  pre: function(template) { var rule = $("rule");
-                            var where = document.createElement("where");
-                            where.setAttribute("subject", "name");
-                            where.setAttribute("rel", "equals");
-                            where.setAttribute("value", "Raven");
-                            rule.appendChild(where);
-                            return where; },
-  error: "Error parsing template: <where> element must have at least one variable as a subject or value",
-  post: function(where) { where.remove(); }
-},
-
-// bad member container
-{
-  pre: template => $("member").setAttribute("container", "blah"),
-  error: "Error parsing template: <member> requires a variable for its container attribute",
-  post: () => $("member").setAttribute("container", "?uri"),
-},
-
-// bad member child
-{
-  pre: template => $("member").setAttribute("child", "blah"),
-  error: "Error parsing template: <member> requires a variable for its child attribute",
-  post: () => $("member").setAttribute("child", "?child"),
-},
-
-// bad triple subject
-{
-  pre: template => $("triple").removeAttribute("subject"),
-  error: "Error parsing template: <triple> requires a variable for its subject attribute",
-  post: () => $("triple").setAttribute("subject", "?child"),
-},
-
-// missing triple predicate
-{
-  pre: template => $("triple").removeAttribute("predicate"),
-  error: "Error parsing template: <triple> should have a non-variable value as a predicate",
-  post: () => $("triple").setAttribute("predicate", "http://www.some-fictitious-zoo.com/rdf#name"),
-},
-
-// bad triple predicate
-{
-  pre: template => $("triple").setAttribute("predicate", "?predicate"),
-  error: "Error parsing template: <triple> should have a non-variable value as a predicate",
-  post: () => $("triple").setAttribute("predicate", "http://www.some-fictitious-zoo.com/rdf#name"),
-},
-
-// bad triple object
-{
-  pre: template => $("triple").removeAttribute("object"),
-  error: "Error parsing template: <triple> requires a variable for its object attribute",
-  post: () => $("triple").setAttribute("object", "?name"),
-},
-
-// content not first element in query
-{
-  pre: function(template) { var content = $("content"); content.parentNode.appendChild(content); return content; },
-  error: "Error parsing template: expected <content> to be first",
-  post: content => content.parentNode.insertBefore(content, content.parentNode.firstChild),
-},
-
-// member container variable not bound
-{
-  pre: template => $("member").removeAttribute("container"),
-  error: "Error parsing template: neither container or child variables of <member> has a value",
-  post: () => $("member").setAttribute("container", "?uri"),
-},
-
-// neither triple subject or object variable are bound
-{
-  pre: template => $("triple").setAttribute("subject", "?blah"),
-  error: "Error parsing template: neither subject or object variables of <triple> has a value",
-  post: () => $("triple").setAttribute("subject", "?child"),
-},
-
-// neither triple subject or object variable are bound
-{
-  pre: function(template) { var triple = $("triple"); triple.setAttribute("subject", "blah");
-                            triple.setAttribute("object", "blah"); },
-  error: "Error parsing template: <triple> should have at least one variable as a subject or object",
-  post: function() { var triple = $("triple"); triple.setAttribute("subject", "?uri");
-                     triple.setAttribute("object", "?uri") }
-},
-
-// could not parse xml query expression
-{
-  firstXMLTest: true,
-  pre: function(template) { $("query").setAttribute("expr", "something()"); },
-  error: "Error parsing template: XPath expression in query could not be parsed",
-  post: function() { }
-},
-
-// could not parse xml assign expression
-{
-  pre: function(template) { var query = $("query");
-                            query.setAttribute("expr", "*");
-                            var assign = document.createElement("assign");
-                            assign.setAttribute("var", "?name");
-                            assign.setAttribute("expr", "something()");
-                            query.appendChild(assign);
-                            return assign; },
-  error: "Error parsing template: XPath expression in <assign> could not be parsed",
-  post: function(assign) { assign.remove(); }
-},
-
-// could not parse xml binding expression
-{
-  pre: function(template) { $("binding").setAttribute("predicate", "something()"); },
-  error: "Error parsing template: XPath expression in <binding> could not be parsed",
-  post: function() { $("binding").setAttribute("predicate", "[name]"); },
-},
-
-];
-
-function runTest()
-{
-  var root = $("root");
-  var template = $("template");
-  while (test = tests.shift()) {
-    consoleService.reset();
-    var context = test.pre(template);
-    root.builder.rebuild();
-    checkConsole(test.error);
-    test.post(context);
-
-    // preload and set up for the xml datasource query error tests
-    if (tests.length && tests[0].firstXMLTest) {
-      var src = window.location.href.replace(/test_tmpl.*xul/, "animals.xml");
-      xmlDoc = new XMLHttpRequest();
-      xmlDoc.open("get", src, false);
-      xmlDoc.send(null);
-
-      var root = $("root");
-      root.setAttribute("querytype", "xml");
-      root.setAttribute("datasources", "animals.xml");
-      $("binding").setAttribute("predicate", "[name]");
-
-      function waitForDatasource() {
-        // wait for the datasource to be available before continuing the test
-        if (root.builder.datasource instanceof XMLDocument)
-          runTest();
-        else
-          setTimeout(waitForDatasource, 100);
-      }
-
-      setTimeout(waitForDatasource, 0);
-      return;
-    }
-  }
-  SimpleTest.finish();
-}
-
-]]>
-</script>
-
-<vbox id="root" datasources="animals.rdf" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-  <query id="query">
-    <content id="content" uri="?uri"/>
-    <member id="member" container="?uri" child="?child"/>
-    <triple id="triple" subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-  </query>
-  <rule id="rule">
-    <binding id="binding" subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-    <action id="action">
-      <label uri="?child" value="?name"/>
-    </action>
-  </rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_extendedsyntax.xul
+++ /dev/null
@@ -1,95 +0,0 @@
-<?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"?>
-
-<!--
-  extended syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="3" id="http://www.some-fictitious-zoo.com/birds/wren" value="Wren"/>
-    <label id="http://www.some-fictitious-zoo.com/birds/emu" value="Emu"/>
-    <label step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" value="Barn Owl"/>
-    <label id="http://www.some-fictitious-zoo.com/birds/raven" value="Raven"/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" value="Archaeopteryx"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" value="Emperor Penguin"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="extended syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<rule id="rule">
-<conditions id="conditions">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxemptyconditions.xul
+++ /dev/null
@@ -1,48 +0,0 @@
-<?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"?>
-
-<!--
-  extended syntax - empty conditions
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="extended syntax - empty conditions";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<rule id="rule">
-<conditions id="conditions"/>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxotherrefvariable.xul
+++ /dev/null
@@ -1,95 +0,0 @@
-<?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"?>
-
-<!--
-  extended syntax - other ref variable
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="3" id="http://www.some-fictitious-zoo.com/birds/wren" value="Wren"/>
-    <label id="http://www.some-fictitious-zoo.com/birds/emu" value="Emu"/>
-    <label step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" value="Barn Owl"/>
-    <label id="http://www.some-fictitious-zoo.com/birds/raven" value="Raven"/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" value="Archaeopteryx"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" value="Emperor Penguin"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="extended syntax - other ref variable";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<rule id="rule">
-<conditions id="conditions">
-<content uri="?start"/>
-<member container="?start" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxremoveunmatched.xul
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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"?>
-
-<!--
-  extended syntax, remove unmatched
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/humans/robert" value="Robert Sanderson"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="extended syntax, remove unmatched";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans">
-<template id="template">
-<rule>
-<conditions>
-<content uri="?uri"/>
-<member container="?uri" child="?human"/>
-<triple subject="?human" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?human" predicate="http://www.some-fictitious-zoo.com/rdf#lastName" object="?lastname"/>
-</conditions>
-<action id="action">
-<label uri="?human" value="?name ?lastname"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxsimplevariablesubstitution.xul
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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"?>
-
-<!--
-  extended syntax - simple variable substitution
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value=""/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="extended syntax - simple variable substitution";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<rule id="rule">
-<conditions id="conditions">
-<content uri="?start"/>
-<member container="?start" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxtworulesrecurse.xul
+++ /dev/null
@@ -1,81 +0,0 @@
-<?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"?>
-
-<!--
-  extended syntax - two rules recurse
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <vbox id="http://www.some-fictitious-zoo.com/humans/sarah">
-      <label value="The favorite animals of Sarah"/>
-      <label id="http://www.some-fictitious-zoo.com/birds/emu" class="indent" value="Emu which belongs to the class Birds"/>
-      <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" class="indent" value="Polar Bear which belongs to the class Mammals"/>
-      <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" class="indent" value="Tarantula which belongs to the class Arachnids"/>
-    </vbox>
-    <vbox id="http://www.some-fictitious-zoo.com/humans/robert">
-      <label value="The favorite animals of Robert"/>
-      <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" class="indent" value="Tarantula which belongs to the class Arachnids"/>
-      <label id="http://www.some-fictitious-zoo.com/reptiles/anaconda" class="indent" value="Anaconda which belongs to the class Reptiles"/>
-      <label id="http://www.some-fictitious-zoo.com/reptiles/chameleon" class="indent" value="Chameleon which belongs to the class Reptiles"/>
-      <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" class="indent" value="African Elephant which belongs to the class Mammals"/>
-    </vbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="extended syntax - two rules recurse";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans">
-<template>
-<rule>
-<conditions>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action>
-<vbox uri="?child">
-<label value="The favorite animals of ?name"/>
-</vbox>
-</action>
-</rule>
-<rule>
-<conditions>
-<content uri="?uri"/>
-<triple subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal" object="?child"/>
-<member container="?animalClass" child="?child"/>
-<triple subject="?animalClass" predicate="http://www.w3.org/1999/02/22-rdf-syntax-ns#type" object="http://www.some-fictitious-zoo.com/rdf#Class"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?animalClass" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?animalClassName"/>
-</conditions>
-<action>
-<label uri="?child" class="indent" value="?name which belongs to the class ?animalClassName"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_extendedsyntaxusinganinterveningcontainer.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  extended syntax using an intervening container
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <groupbox>
-      <label id="http://www.some-fictitious-zoo.com/birds/emu" value="Emu"/>
-      <label id="http://www.some-fictitious-zoo.com/birds/barnowl" value="Barn Owl"/>
-      <label id="http://www.some-fictitious-zoo.com/birds/raven" value="Raven"/>
-    </groupbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="extended syntax using an intervening container";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<rule id="rule">
-<conditions id="conditions">
-<content uri="?start"/>
-<member container="?start" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action id="action">
-<groupbox>
-<label uri="?animal" value="?name"/>
-</groupbox>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_extendedvariablesubstitution.xul
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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"?>
-
-<!--
-  extended variable substitution
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Tarantula?  - TarantulaTarantula^ Test"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="extended variable substitution";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<rule id="rule">
-<conditions id="conditions">
-<content uri="?start"/>
-<member container="?start" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name^?? ?name?name - ?name^?name^^ Test"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_gridelement.xul
+++ /dev/null
@@ -1,131 +0,0 @@
-<?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"?>
-
-<!--
-  grid element
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <columns>
-      <column/>
-      <column/>
-    </columns>
-    <rows>
-      <label step="3" id="http://www.some-fictitious-zoo.com/birds/wren" value="The coolest animal is: Wren"/>
-      <row id="http://www.some-fictitious-zoo.com/birds/emu">
-        <label value="Emu"/>
-        <label value="Birds"/>
-      </row>
-      <label step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" value="The coolest animal is: Barn Owl"/>
-      <row id="http://www.some-fictitious-zoo.com/birds/raven">
-        <label value="Raven"/>
-        <label value="Birds"/>
-      </row>
-      <row step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">
-        <label value="Archaeopteryx"/>
-        <label value="Birds"/>
-      </row>
-      <label step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" value="The coolest animal is: Emperor Penguin"/>
-    </rows>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="grid element";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<grid xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<columns>
-<column/>
-<column/>
-</columns>
-<template>
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?classname"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions>
-<where subject="?name" rel="equals" value="Raven" negate="true"/>
-<where subject="?name" rel="contains" value="n"/>
-</conditions>
-<action>
-<rows>
-<label uri="?child" value="The coolest animal is: ?name"/>
-</rows>
-</action>
-</rule>
-<rule>
-<action>
-<rows>
-<row uri="?child">
-<label value="?name"/>
-<label value="?classname"/>
-</row>
-</rows>
-</action>
-</rule>
-</template>
-</grid>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_htmlelementextendedsyntaxwithbinding.xul
+++ /dev/null
@@ -1,114 +0,0 @@
-<?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"?>
-
-<!--
-  html element - extended syntax with binding
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" xmlns:html="http://www.w3.org/1999/xhtml">
-    <html:div id="http://www.some-fictitious-zoo.com/mammals/lion" title="Lion">
-      <html:em step="-2">4</html:em>
-      <html:em step="2">9</html:em>
-    </html:div>
-    <html:div id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" title="HIPPOPOTAMUS">
-      <html:em>2</html:em>
-    </html:div>
-    <html:p id="http://www.some-fictitious-zoo.com/mammals/africanelephant">
-      African Elephant
-      <html:span title="14"/>
-    </html:p>
-    <html:p step="4" id="http://www.some-fictitious-zoo.com/mammals/chimpanzee">
-      Chimpanzee
-      <html:span step="-5"/>
-      <html:span step="5" title="3"/>
-    </html:p>
-    <html:div id="http://www.some-fictitious-zoo.com/mammals/llama" title="LLAMA">
-      <html:em>5</html:em>
-    </html:div>
-    <html:div id="http://www.some-fictitious-zoo.com/mammals/polarbear" title="Polar Bear">
-      <html:em step="-1">20</html:em>
-      <html:em step="1">5</html:em>
-    </html:div>
-    <html:div id="http://www.some-fictitious-zoo.com/mammals/aardvark" title="aardvark">
-      <html:em>2</html:em>
-    </html:div>
-    <html:p step="-3" id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">
-      Nine-banded Armadillo
-      <html:span title="1"/>
-    </html:p>
-    <html:div id="http://www.some-fictitious-zoo.com/mammals/gorilla" title="Gorilla">
-      <html:em>7</html:em>
-    </html:div>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="html element - extended syntax with binding";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'mammals/polarbear');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'mammals/polarbear'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('5'));
-  },
-  // step 2
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'mammals/lion');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'mammals/lion'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('9'));
-  },
-  // step 3
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('7', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Nine-banded Armadillo'), true);
-  },
-  // step 4
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/chimpanzee');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Chimpanzee'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 5
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/chimpanzee'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    RDF.GetLiteral('3'), true);
-  }
-];
-]]>
-</script>
-
-<div xmlns="http://www.w3.org/1999/xhtml" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals"><template xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="template"><rule><conditions><content uri="?uri"/><member container="?uri" child="?animal"/><triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/><where subject="?name" rel="contains" value="an"/></conditions><bindings><binding subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/></bindings><action><p xmlns="http://www.w3.org/1999/xhtml" uri="?animal"><textnode xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" value="?name"/><span title="?specimens"/></p></action></rule><rule><conditions><content uri="?uri"/><member container="?uri" child="?animal"/><triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/></conditions><bindings><binding subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/></bindings><action><div xmlns="http://www.w3.org/1999/xhtml" uri="?animal" title="?name"><em><textnode xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" value="?specimens"/></em></div></action></rule></template></div>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_htmlelementquerysyntaxrecursive.xul
+++ /dev/null
@@ -1,81 +0,0 @@
-<?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"?>
-
-<!--
-  html element - query syntax recursive
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" xmlns:html="http://www.w3.org/1999/xhtml">
-    <html:strong id="http://www.some-fictitious-zoo.com/arachnids" container="true" empty="false">Arachnids</html:strong>
-    <html:strong step="-3" id="http://www.some-fictitious-zoo.com/birds" container="true" empty="false">
-      Birds
-      <html:span id="http://www.some-fictitious-zoo.com/birds/barnowl">Barn Owl</html:span>
-    </html:strong>
-    <html:strong step="1" id="http://www.some-fictitious-zoo.com/insects">Insects</html:strong>
-    <html:strong id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-      Mammals
-      <html:span id="http://www.some-fictitious-zoo.com/mammals/lion">Lion</html:span>
-      <html:span id="http://www.some-fictitious-zoo.com/mammals/hippopotamus">HIPPOPOTAMUS</html:span>
-      <html:span step="2" id="http://www.some-fictitious-zoo.com/mammals/koala">Koala</html:span>
-      <html:span id="http://www.some-fictitious-zoo.com/mammals/polarbear">Polar Bear</html:span>
-      <html:span id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">Nine-banded Armadillo</html:span>
-      <html:span id="http://www.some-fictitious-zoo.com/mammals/gorilla">Gorilla</html:span>
-    </html:strong>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="html element - query syntax recursive";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'insects');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Insects'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'all-animals'));
-    container.InsertElementAt(newnode, '3', true);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'all-animals'));
-    var removednode = container.RemoveElementAt('2', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Birds'), true);
-  }
-];
-]]>
-</script>
-
-<div xmlns="http://www.w3.org/1999/xhtml" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/all-animals"><template xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="template"><query><content uri="?uri"/><member container="?uri" child="?child"/><triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/></query><rule><conditions><where subject="?name" rel="endswith" multiple="true" value="mals,ects,nids,irds"/></conditions><action><strong xmlns="http://www.w3.org/1999/xhtml" uri="?child"><textnode xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" value="?name"/></strong></action></rule><rule><conditions><where subject="?uri" rel="equals" negate="true" value="http://www.some-fictitious-zoo.com/all-animals"/><where subject="?name" rel="contains" ignorecase="true" value="o"/></conditions><action><span xmlns="http://www.w3.org/1999/xhtml" uri="?child"><textnode xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" value="?name"/></span></action></rule></template></div>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_htmlelementquerysyntaxwithmultiplerules.xul
+++ /dev/null
@@ -1,102 +0,0 @@
-<?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"?>
-
-<!--
-  html element - query syntax with multiple rules
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" xmlns:html="http://www.w3.org/1999/xhtml">
-    <html:span step="-2" id="http://www.some-fictitious-zoo.com/mammals/lion">Lion</html:span>
-    <html:span id="http://www.some-fictitious-zoo.com/mammals/hippopotamus">HIPPOPOTAMUS</html:span>
-    <vbox>
-      <html:p step="2" id="http://www.some-fictitious-zoo.com/mammals/lion">
-        <html:span title="Lion"/>
-      </html:p>
-      <html:p id="http://www.some-fictitious-zoo.com/mammals/africanelephant">
-        <html:span title="African Elephant"/>
-      </html:p>
-      <html:p step="-1" id="http://www.some-fictitious-zoo.com/mammals/polarbear">
-        <html:span title="Polar Bear"/>
-      </html:p>
-      <html:p id="http://www.some-fictitious-zoo.com/mammals/gorilla">
-        <html:span title="Gorilla"/>
-      </html:p>
-    </vbox>
-    <html:span step="5" id="http://www.some-fictitious-zoo.com/mammals/chimpanzee">Chimpanzee</html:span>
-    <html:span id="http://www.some-fictitious-zoo.com/mammals/llama">LLAMA</html:span>
-    <html:span step="1" id="http://www.some-fictitious-zoo.com/mammals/polarbear">Polar Bear</html:span>
-    <html:span id="http://www.some-fictitious-zoo.com/mammals/aardvark">aardvark</html:span>
-    <html:span step="-3" id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">Nine-banded Armadillo</html:span>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="html element - query syntax with multiple rules";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = true;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'mammals/polarbear');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'mammals/polarbear'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('5'));
-  },
-  // step 2
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'mammals/lion');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'mammals/lion'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('9'));
-  },
-  // step 3
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('7', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Nine-banded Armadillo'), true);
-  },
-  // step 4
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/chimpanzee');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Chimpanzee'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 5
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/chimpanzee'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    RDF.GetLiteral('3'), true);
-  }
-];
-]]>
-</script>
-
-<div xmlns="http://www.w3.org/1999/xhtml" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals"><template xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="template"><query><content uri="?uri"/><member container="?uri" child="?animal"/><triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/><triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/></query><rule><conditions id="conditions"><where subject="?specimens" rel="greater" value="6"/></conditions><action><vbox><p xmlns="http://www.w3.org/1999/xhtml" uri="?animal"><span title="?name"/></p></vbox></action></rule><rule><action><span xmlns="http://www.w3.org/1999/xhtml" uri="?animal"><textnode xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" value="?name"/></span></action></rule></template></div>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_htmlelementsimplesyntax.xul
+++ /dev/null
@@ -1,81 +0,0 @@
-<?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"?>
-
-<!--
-  html element - simple syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" xmlns:html="http://www.w3.org/1999/xhtml">
-    <html:p step="3" id="http://www.some-fictitious-zoo.com/birds/wren" title="Wren"/>
-    <html:p id="http://www.some-fictitious-zoo.com/birds/emu" title="Emu"/>
-    <html:p step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" title="Barn Owl"/>
-    <html:p id="http://www.some-fictitious-zoo.com/birds/raven" title="Raven"/>
-    <html:p step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" title="Archaeopteryx"/>
-    <html:p step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" title="Emperor Penguin"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="html element - simple syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<div xmlns="http://www.w3.org/1999/xhtml" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds"><template xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"><p xmlns="http://www.w3.org/1999/xhtml" uri="rdf:*" title="rdf:http://www.some-fictitious-zoo.com/rdf#name"/></template></div>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_htmlelementsimplesyntaxusingatextnode.xul
+++ /dev/null
@@ -1,81 +0,0 @@
-<?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"?>
-
-<!--
-  html element - simple syntax using a textnode
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" xmlns:html="http://www.w3.org/1999/xhtml">
-    <html:p step="3" id="http://www.some-fictitious-zoo.com/birds/wren">Wren</html:p>
-    <html:p id="http://www.some-fictitious-zoo.com/birds/emu">Emu</html:p>
-    <html:p step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl">Barn Owl</html:p>
-    <html:p id="http://www.some-fictitious-zoo.com/birds/raven">Raven</html:p>
-    <html:p step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">Archaeopteryx</html:p>
-    <html:p step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin">Emperor Penguin</html:p>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="html element - simple syntax using a textnode";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<div xmlns="http://www.w3.org/1999/xhtml" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds"><template xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"><p xmlns="http://www.w3.org/1999/xhtml" uri="rdf:*"><textnode xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/></p></template></div>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_invalidqp.xul
+++ /dev/null
@@ -1,48 +0,0 @@
-<?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"?>
-
-<!--
-  invalid syntax - querytype="blah"
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="invalid syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-Components.classes["@mozilla.org/consoleservice;1"].
-           getService(Components.interfaces.nsIConsoleService).reset();
-expectedConsoleMessages.push("Error parsing template: querytype attribute doesn't specify a valid query processor");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null"
-      ref="http://www.some-fictitious-zoo.com/birds" querytype="blah">
-<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>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_listboxelement.xul
+++ /dev/null
@@ -1,117 +0,0 @@
-<?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"?>
-
-<!--
-  listbox element
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <listcols>
-      <listcol flex="1"/>
-      <listcol flex="1"/>
-    </listcols>
-    <listitem step="3" id="http://www.some-fictitious-zoo.com/birds/wren">
-      <listcell label="Wren"/>
-      <listcell label=""/>
-    </listitem>
-    <listitem id="http://www.some-fictitious-zoo.com/birds/emu">
-      <listcell label="Emu"/>
-      <listcell label="Dromaius novaehollandiae"/>
-    </listitem>
-    <listitem step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-      <listcell label="Barn Owl"/>
-      <listcell label="Tyto alba"/>
-    </listitem>
-    <listitem id="http://www.some-fictitious-zoo.com/birds/raven">
-      <listcell label="Raven"/>
-      <listcell label="Corvus corax"/>
-    </listitem>
-    <listitem step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">
-      <listcell label="Archaeopteryx"/>
-      <listcell label=""/>
-    </listitem>
-    <listitem step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin">
-      <listcell label="Emperor Penguin"/>
-      <listcell label=""/>
-    </listitem>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.expectAssertions(4);
-
-SimpleTest.waitForExplicitFinish();
-
-var testid ="listbox element";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<listbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<listcols>
-<listcol flex="1"/>
-<listcol flex="1"/>
-</listcols>
-<template>
-<listitem uri="rdf:*">
-<listcell label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-<listcell label="rdf:http://www.some-fictitious-zoo.com/rdf#species"/>
-</listitem>
-</template>
-</listbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_literalasmember.xul
+++ /dev/null
@@ -1,52 +0,0 @@
-<?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"?>
-
-<!--
-  literal as member
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="literal as member";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<rule id="rule">
-<conditions id="conditions">
-<content uri="?start"/>
-<member container="?start" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action id="action">
-<label uri="?name" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_membervariablechanged.xul
+++ /dev/null
@@ -1,49 +0,0 @@
-<?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"?>
-
-<!--
-  member variable changed
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button id="http://www.some-fictitious-zoo.com/birds/emu" label="http://www.some-fictitious-zoo.com/birds/emu Emu"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/barnowl" label="http://www.some-fictitious-zoo.com/birds/barnowl Barn Owl"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/raven" label="http://www.some-fictitious-zoo.com/birds/raven Raven"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="member variable changed";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template member="?child">
-<rule>
-<button uri="?child" label="?child rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_membervariablesubstitution.xul
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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"?>
-
-<!--
-  member variable substitution
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="http://www.some-fictitious-zoo.com/arachnids/tarantula"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="member variable substitution";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<rule id="rule">
-<conditions id="conditions">
-<content uri="?start"/>
-<member container="?start" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?animal"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_menuelement.xul
+++ /dev/null
@@ -1,90 +0,0 @@
-<?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"?>
-
-<!--
-  menu element
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <menupopup>
-      <menuitem step="3" id="http://www.some-fictitious-zoo.com/birds/wren" label="Wren"/>
-      <menuitem id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-      <menuitem step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-      <menuitem id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-      <menuitem step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" label="Archaeopteryx"/>
-      <menuitem step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" label="Emperor Penguin"/>
-    </menupopup>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="menu element";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = true;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<button xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" type="menu" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template>
-<menupopup>
-<menuitem uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</menupopup>
-</template>
-</button>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_menuelementrecursive.xul
+++ /dev/null
@@ -1,121 +0,0 @@
-<?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"?>
-
-<!--
-  menu element recursive
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template()"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <menupopup>
-      <menuitem id="http://www.some-fictitious-zoo.com/arachnids" label="Arachnids" container="true" empty="false"/>
-      <menu step="-2" id="http://www.some-fictitious-zoo.com/birds" label="Birds" container="true" empty="false"/>
-      <menu step="2" id="http://www.some-fictitious-zoo.com/birds" label="Birds" container="true" empty="false" open="true">
-        <menupopup>
-          <menuitem step="4" id="http://www.some-fictitious-zoo.com/birds/wren" label="Wren"/>
-          <menuitem id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-          <menuitem step="-5" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-          <menuitem id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-          <menuitem step="3" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" label="Archaeopteryx"/>
-          <menuitem id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" label="Emperor Penguin"/>
-        </menupopup>
-      </menu>
-      <menuitem id="http://www.some-fictitious-zoo.com/crustaceans" label="Crustaceans" container="true" empty="true"/>
-      <menuitem id="http://www.some-fictitious-zoo.com/fish" label="Fish" container="true" empty="false"/>
-      <menuitem id="http://www.some-fictitious-zoo.com/mammals" label="Mammals" container="true" empty="false"/>
-      <menuitem id="http://www.some-fictitious-zoo.com/reptiles" label="Reptiles" container="true" empty="false"/>
-    </menupopup>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="menu element recursive";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = true;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    // nothing should change at this step as the submenu is not open
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    // open the submenu
-    root.lastChild.firstChild.nextSibling.open = true;
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-    root.lastChild.firstChild.nextSibling.open = true;
-  },
-  // step 4
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-    root.lastChild.firstChild.nextSibling.open = true;
-  },
-  // step 5
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-    root.lastChild.firstChild.nextSibling.open = true;
-  }
-];
-]]>
-</script>
-
-<button xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" type="menu" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/all-animals">
-<template>
-<rule iscontainer="true" zoo:name="Birds" xmlns:zoo="http://www.some-fictitious-zoo.com/rdf#">
-<menupopup>
-<menu uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</menupopup>
-</rule>
-<rule parent="button">
-<menupopup>
-<menuitem uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</menupopup>
-</rule>
-<rule parent="menu">
-<menupopup>
-<menuitem uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</menupopup>
-</rule>
-</template>
-</button>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_menulistelement.xul
+++ /dev/null
@@ -1,90 +0,0 @@
-<?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"?>
-
-<!--
-  menulist element
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="$('root').selectedItem = null; test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <menupopup>
-      <menuitem step="3" id="http://www.some-fictitious-zoo.com/birds/wren" label="Wren"/>
-      <menuitem id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-      <menuitem step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-      <menuitem id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-      <menuitem step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" label="Archaeopteryx"/>
-      <menuitem step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" label="Emperor Penguin"/>
-    </menupopup>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="menulist element";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<menulist xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template>
-<menupopup>
-<menuitem uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</menupopup>
-</template>
-</menulist>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_mixedsyntaxiscontainer.xul
+++ /dev/null
@@ -1,67 +0,0 @@
-<?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"?>
-
-<!--
-  mixed syntax - iscontainer
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <checkbox id="http://www.some-fictitious-zoo.com/humans/sarah" label="Sarah"/>
-    <button id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" label="Mammals"/>
-    <button id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true" label="Crustaceans"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="mixed syntax - iscontainer";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    targetds.Unassert(RDF.GetResource(ZOO_NS + 'humans/sarah'),
-                      RDF.GetResource(ZOO_NS + 'rdf#pets'),
-                      RDF.GetResource(ZOO_NS + 'sarahs-pets'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/marked" flags="dont-recurse">
-<template id="template">
-<rule id="rule1" iscontainer="true">
-<button uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</rule>
-<rule>
-<conditions>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action>
-<checkbox uri="?child" label="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_mixedsyntaxiscontainerisempty.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  mixed syntax - iscontainer isempty
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <checkbox id="http://www.some-fictitious-zoo.com/humans/sarah" label="Sarah"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" label="Mammals"/>
-    <label id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true" value="Crustaceans"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="mixed syntax - iscontainer isempty";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/marked" flags="dont-recurse">
-<template id="template">
-<rule id="rule1" iscontainer="true" isempty="true">
-<label uri="rdf:*" value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</rule>
-<rule>
-<conditions>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action>
-<checkbox uri="?child" label="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_mixedsyntaxisempty.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  mixed syntax - isempty
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/humans/sarah" value="Sarah"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" label="Mammals"/>
-    <label id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true" value="Crustaceans"/>
-    <label id="http://www.some-fictitious-zoo.com/birds/emu" value="Emu"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="mixed syntax - isempty";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/marked" flags="dont-recurse">
-<template id="template">
-<rule id="rule1" isempty="true">
-<label uri="rdf:*" value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</rule>
-<rule>
-<conditions>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action>
-<checkbox uri="?child" label="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_noaction.xul
+++ /dev/null
@@ -1,48 +0,0 @@
-<?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"?>
-
-<!--
-  no action
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="no action";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template>
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<button uri="?child" label="?name"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_noactionuriattribute.xul
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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"?>
-
-<!--
-  no action uri attribute
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label value="Tarantula"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="no action uri attribute";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'arachnids/tarantula');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'arachnids/tarantula'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Hairy Spider'));
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<label value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_parentconditions.xul
+++ /dev/null
@@ -1,113 +0,0 @@
-<?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"?>
-
-<!--
-  parent - conditions
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <box step="-3" id="http://www.some-fictitious-zoo.com/birds" container="true" empty="false">
-      <label value="Birds"/>
-      <button id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-      <button id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-    </box>
-    <box step="1" id="http://www.some-fictitious-zoo.com/insects">
-      <label value="Insects"/>
-    </box>
-    <box id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-      <label value="Crustaceans"/>
-    </box>
-    <box id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-      <label value="Mammals"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/africanelephant" label="African Elephant"/>
-      <button step="2" id="http://www.some-fictitious-zoo.com/mammals/koala" label="Koala"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/polarbear" label="Polar Bear"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/aardvark" label="aardvark"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" label="Nine-banded Armadillo"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/gorilla" label="Gorilla"/>
-    </box>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="parent - conditions";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'insects');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Insects'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'all-animals'));
-    container.InsertElementAt(newnode, '3', true);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'all-animals'));
-    var removednode = container.RemoveElementAt('2', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Birds'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/all-animals">
-<template>
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?parent"/>
-<triple subject="?parent" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions parent="box">
-<where subject="?name" rel="contains" value="a"/>
-</conditions>
-<action>
-<button uri="?parent" label="?name"/>
-</action>
-</rule>
-<rule>
-<conditions>
-<where subject="?name" rel="equals" multiple="true" value="Mammals,Crustaceans,Birds,Insects"/>
-</conditions>
-<action>
-<box uri="?parent">
-<label value="?name"/>
-</box>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_parentcontenttag.xul
+++ /dev/null
@@ -1,114 +0,0 @@
-<?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"?>
-
-<!--
-  parent - content tag
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <groupbox step="-3" id="http://www.some-fictitious-zoo.com/birds" container="true" empty="false">
-      <caption value="Birds"/>
-      <checkbox id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-      <checkbox id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-    </groupbox>
-    <groupbox step="1" id="http://www.some-fictitious-zoo.com/insects">
-      <caption value="Insects"/>
-    </groupbox>
-    <groupbox id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-      <caption value="Crustaceans"/>
-    </groupbox>
-    <groupbox id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-      <caption value="Mammals"/>
-      <checkbox id="http://www.some-fictitious-zoo.com/mammals/africanelephant" label="African Elephant"/>
-      <checkbox step="2" id="http://www.some-fictitious-zoo.com/mammals/koala" label="Koala"/>
-      <checkbox id="http://www.some-fictitious-zoo.com/mammals/polarbear" label="Polar Bear"/>
-      <checkbox id="http://www.some-fictitious-zoo.com/mammals/aardvark" label="aardvark"/>
-      <checkbox id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" label="Nine-banded Armadillo"/>
-      <checkbox id="http://www.some-fictitious-zoo.com/mammals/gorilla" label="Gorilla"/>
-    </groupbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="parent - content tag";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'insects');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Insects'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'all-animals'));
-    container.InsertElementAt(newnode, '3', true);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'all-animals'));
-    var removednode = container.RemoveElementAt('2', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Birds'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/all-animals">
-<template>
-<rule>
-<conditions>
-<content uri="?uri" tag="groupbox"/>
-<member container="?uri" child="?parent"/>
-<triple subject="?parent" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<where subject="?name" rel="contains" value="a"/>
-</conditions>
-<action>
-<checkbox uri="?parent" label="?name"/>
-</action>
-</rule>
-<rule>
-<conditions>
-<content uri="?uri"/>
-<member container="?uri" child="?parent"/>
-<triple subject="?parent" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<where subject="?name" rel="equals" multiple="true" value="Mammals,Crustaceans,Birds,Insects"/>
-</conditions>
-<action>
-<groupbox uri="?parent">
-<caption value="?name"/>
-</groupbox>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_parentsimplesyntax.xul
+++ /dev/null
@@ -1,110 +0,0 @@
-<?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"?>
-
-<!--
-  parent - simple syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox step="-3" id="http://www.some-fictitious-zoo.com/birds" container="true" empty="false">
-      <label value="Birds"/>
-      <button id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-      <button id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-      <button id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-    </hbox>
-    <hbox step="1" id="http://www.some-fictitious-zoo.com/insects">
-      <label value="Insects"/>
-    </hbox>
-    <hbox id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-      <label value="Crustaceans"/>
-    </hbox>
-    <hbox id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-      <label value="Mammals"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/lion" label="Lion"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" label="HIPPOPOTAMUS"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/africanelephant" label="African Elephant"/>
-      <button step="2" id="http://www.some-fictitious-zoo.com/mammals/koala" label="Koala"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/llama" label="LLAMA"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/polarbear" label="Polar Bear"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/aardvark" label="aardvark"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" label="Nine-banded Armadillo"/>
-      <button id="http://www.some-fictitious-zoo.com/mammals/gorilla" label="Gorilla"/>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="parent - simple syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'insects');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Insects'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'all-animals'));
-    container.InsertElementAt(newnode, '3', true);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'all-animals'));
-    var removednode = container.RemoveElementAt('2', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Birds'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/all-animals">
-<template member="?parent">
-<rule parent="hbox">
-<button uri="?parent" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</rule>
-<rule>
-<conditions>
-<content uri="?uri"/>
-<member container="?uri" child="?parent"/>
-<triple subject="?parent" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<where subject="?name" rel="equals" multiple="true" value="Mammals,Crustaceans,Birds,Insects"/>
-</conditions>
-<action>
-<hbox uri="?parent">
-<label value="?name"/>
-</hbox>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_query3triples.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  query - 3 triples
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" unordered="true">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Robert likes Tarantulas"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/anaconda" value="Robert likes Anacondas"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/chameleon" value="Robert likes Chameleons"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="Robert likes African Elephants"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - 3 triples";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans/robert">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<triple subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?humanname"/>
-<triple subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal" object="?favoriteAnimal"/>
-<triple subject="?favoriteAnimal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?animalname"/>
-</query>
-<rule>
-<conditions id="conditions"/>
-<action>
-<label uri="?favoriteAnimal" value="?humanname likes ?animalname^s"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_query3tripleswherecontains.xul
+++ /dev/null
@@ -1,111 +0,0 @@
-<?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"?>
-
-<!--
-  query - 3 triples - where contains
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Robert likes Tarantulas"/>
-    <label step="-4" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="Robert likes African Elephants"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="Robert likes African Elephants"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - 3 triples - where contains";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/arctichare');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Arctic Hare'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/zebra');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Zebra'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('4', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('African Elephant'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/africanelephant');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('African Elephant'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 6
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/koala'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimensAsString'),
-                    RDF.GetLiteral('8'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans/robert">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<triple subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?humanname"/>
-<triple subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal" object="?favoriteAnimal"/>
-<triple subject="?favoriteAnimal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?animalname"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?favoriteAnimal" rel="contains" value="ant"/>
-</conditions>
-<action>
-<label uri="?favoriteAnimal" value="?humanname likes ?animalname^s"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querymember3tripleswhereequals.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  query - member, 3 triples - where equals
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" unordered="true">
-    <label id="http://www.some-fictitious-zoo.com/birds/emu" value="Sarah likes Emus"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Sarah likes Polar Bears"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - member, 3 triples - where equals";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?human"/>
-<triple subject="?human" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?humanname"/>
-<triple subject="?human" predicate="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal" object="?favoriteAnimal"/>
-<triple subject="?favoriteAnimal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?animalname"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?humanname" rel="equals" value="Sarah"/>
-</conditions>
-<action>
-<label uri="?favoriteAnimal" value="?humanname likes ?animalname^s"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querymemberandtwotriples.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-  query - member and two triples
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" unordered="true">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Tarantula"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/anaconda" value="Anaconda"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/chameleon" value="Chameleon"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/birds/emu" value="Emu"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - member and two triples";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?human"/>
-<triple subject="?human" predicate="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal" object="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-,<action>
-<label uri="?child" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querymembertriplemembertriple.xul
+++ /dev/null
@@ -1,64 +0,0 @@
-<?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"?>
-
-<!--
-  query - member, triple, member, triple
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" unordered="true">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Tarantula"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/chameleon" value="Chameleon"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label step="-1" id="http://www.some-fictitious-zoo.com/birds/emu" value="Emu"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - member, triple, member, triple";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    targetds.Unassert(RDF.GetResource(ZOO_NS + 'humans/sarah'),
-                      RDF.GetResource(ZOO_NS + 'rdf#pets'),
-                      RDF.GetResource(ZOO_NS + 'sarahs-pets'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?human"/>
-<triple subject="?human" predicate="http://www.some-fictitious-zoo.com/rdf#pets" object="?pets"/>
-<member container="?pets" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-,<action>
-<label uri="?child" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_queryresourcematch.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-  query - resource match
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/arachnids" container="true" empty="false" value="Arachnids"/>
-    <label id="http://www.some-fictitious-zoo.com/birds" container="true" empty="false" value="Birds"/>
-    <label id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true" value="Crustaceans"/>
-    <label id="http://www.some-fictitious-zoo.com/fish" container="true" empty="false" value="Fish"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" value="Mammals"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles" container="true" empty="false" value="Reptiles"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - resource match";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/all-animals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.w3.org/1999/02/22-rdf-syntax-ns#type" object="http://www.some-fictitious-zoo.com/rdf#Class"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-,<action>
-<label uri="?child" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_queryreversetriple.xul
+++ /dev/null
@@ -1,53 +0,0 @@
-<?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"?>
-
-<!--
-  query - reverse triple
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/reptiles" container="true" empty="false" value="Reptiles"/>
-    <label id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true" value="Crustaceans"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - reverse triple";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans/robert">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#keeper" object="?uri"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-,<action>
-<label uri="?child" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_queryselfwithtriple.xul
+++ /dev/null
@@ -1,51 +0,0 @@
-<?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"?>
-
-<!--
-  query - self with triple
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" value="Mammals"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - self with triple";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template>
-<query id="query">
-<content uri="?uri"/>
-<triple subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action>
-<label uri="?uri" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querysetone.xul
+++ /dev/null
@@ -1,95 +0,0 @@
-<?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"?>
-
-<!--
-  queryset - one
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button step="3" id="http://www.some-fictitious-zoo.com/birds/wren" label="Wren"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-    <button step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-    <button step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" label="Archaeopteryx"/>
-    <button step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" label="Emperor Penguin"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="queryset - one";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<queryset>
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action>
-<button uri="?animal" label="?name"/>
-</action>
-</queryset>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querysettwo.xul
+++ /dev/null
@@ -1,117 +0,0 @@
-<?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"?>
-
-<!--
-  queryset - two
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button step="3" id="http://www.some-fictitious-zoo.com/birds/wren" label="Wren"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-    <checkbox step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-    <button step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" label="Archaeopteryx"/>
-    <button step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" label="Emperor Penguin"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="queryset - two";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-    expectConsoleMessage(ZOO_NS + 'birds', ZOO_NS + 'birds/emperorpenguin', true, true,
-                         '2 matching rule 1');
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-    expectConsoleMessage(ZOO_NS + 'birds', ZOO_NS + 'birds/archaeopteryx', true, true,
-                         '2 matching rule 1');
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-    expectConsoleMessage(ZOO_NS + 'birds', ZOO_NS + 'birds/wren', true, true,
-                         '2 matching rule 1');
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-    expectConsoleMessage(ZOO_NS + 'birds', ZOO_NS + 'birds/barnowl', false, false,
-                         '2 (active query is 1)');
-    expectConsoleMessage(ZOO_NS + 'birds', ZOO_NS + 'birds/barnowl', false, true,
-                         '1 (no new active query)');
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" flags="logging"
-      datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template>
-<queryset>
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="Barn Owl"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action>
-<checkbox uri="?animal" label="?name"/>
-</action>
-</queryset>
-<queryset>
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action>
-<button uri="?animal" label="?name"/>
-</action>
-</queryset>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querysettwowithcondition.xul
+++ /dev/null
@@ -1,149 +0,0 @@
-<?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"?>
-
-<!--
-  queryset - two with condition
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox step="-6" id="http://www.some-fictitious-zoo.com/birds/emu">
-      <label value="Emu"/>
-      <label value="Dromaius novaehollandiae"/>
-    </hbox>
-    <button step="6" id="http://www.some-fictitious-zoo.com/birds/emu" label="No Emus Currently"/>
-    <hbox step="3" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">
-      <label value="Archaeopteryx"/>
-      <label value="Archaeopteryx lithographica"/>
-    </hbox>
-    <hbox step="-2" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-      <label value="Barn Owl"/>
-      <label value="Tyto alba"/>
-    </hbox>
-    <button step="-5" id="http://www.some-fictitious-zoo.com/birds/raven" label="No Ravens Currently"/>
-    <hbox step="5" id="http://www.some-fictitious-zoo.com/birds/raven">
-      <label step="-7" value="Raven"/>
-      <label step="7" value="Crow"/>
-      <label value="Corvus corax"/>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="queryset - two with condition";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '2', true);
-  },
-  // step 2
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  },
-  // step 3
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'birds/archaeopteryx'),
-                    RDF.GetResource(ZOO_NS + 'rdf#species'),
-                    RDF.GetLiteral('Archaeopteryx lithographica'), true);
-  },
-  // step 4
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'birds/archaeopteryx'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    RDF.GetLiteral('5'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/raven');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/raven'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('2'));
-  },
-  // step 6
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/emu');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/emu'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('0'));
-  },
-  // step 7
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/raven');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/raven'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Crow'));
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template>
-<queryset>
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions>
-<where subject="?specimens" rel="equals" value="0"/>
-</conditions>
-<action>
-<button uri="?child" label="No ?name^s Currently"/>
-</action>
-</rule>
-</queryset>
-<queryset>
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#species" object="?species"/>
-</query>
-<action>
-<hbox uri="?child">
-<label value="?name^?unknown"/>
-<label value="?species^?specimens"/>
-</hbox>
-</action>
-</queryset>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querysyntax.xul
+++ /dev/null
@@ -1,63 +0,0 @@
-<?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"?>
-
-<!--
-  query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-1" id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Tarantula"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Hairy Spider"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'arachnids/tarantula');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'arachnids/tarantula'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Hairy Spider'));
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querysyntaxmultiplerules.xul
+++ /dev/null
@@ -1,115 +0,0 @@
-<?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"?>
-
-<!--
-  query syntax - multiple rules
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-2" id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <checkbox step="2" id="http://www.some-fictitious-zoo.com/mammals/lion" label="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/africanelephant" label="African Elephant"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/chimpanzee" value="Chimpanzee"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <checkbox step="-1" id="http://www.some-fictitious-zoo.com/mammals/polarbear" label="Polar Bear"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label step="-3" id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/gorilla" label="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query syntax - multiple rules";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'mammals/polarbear');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'mammals/polarbear'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('5'));
-  },
-  // step 2
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'mammals/lion');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'mammals/lion'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('9'));
-  },
-  // step 3
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('7', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Nine-banded Armadillo'), true);
-  },
-  // step 4
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/chimpanzee');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Chimpanzee'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 5
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/chimpanzee'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    RDF.GetLiteral('3'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="greater" value="6"/>
-</conditions>
-<action>
-<checkbox uri="?animal" label="?name"/>
-</action>
-</rule>
-<rule id="rule2">
-<action>
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querysyntaxmultiplerulesfirstconditionall.xul
+++ /dev/null
@@ -1,71 +0,0 @@
-<?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"?>
-
-<!--
-  query syntax - multiple rules first condition all
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/lion" label="Lion"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" label="HIPPOPOTAMUS"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/africanelephant" label="African Elephant"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/llama" label="LLAMA"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/polarbear" label="Polar Bear"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/aardvark" label="aardvark"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" label="Nine-banded Armadillo"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/gorilla" label="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query syntax - multiple rules first condition all";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<where subject="?animal" rel="contains" value="zoo"/>
-<action>
-<checkbox uri="?animal" label="?name"/>
-</action>
-</rule>
-<rule id="rule2">
-<conditions>
-<where subject="?name" rel="contains" value="an"/>
-</conditions>
-<action>
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querysyntaxmultiplerulestwoconditions.xul
+++ /dev/null
@@ -1,113 +0,0 @@
-<?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"?>
-
-<!--
-  query syntax - multiple rules two conditions
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <checkbox step="2" id="http://www.some-fictitious-zoo.com/mammals/lion" label="Lion"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/africanelephant" label="African Elephant"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/chimpanzee" value="Chimpanzee"/>
-    <checkbox step="-1" id="http://www.some-fictitious-zoo.com/mammals/polarbear" label="Polar Bear"/>
-    <label step="-3" id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <checkbox id="http://www.some-fictitious-zoo.com/mammals/gorilla" label="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query syntax - multiple rules two conditions";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'mammals/polarbear');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'mammals/polarbear'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('5'));
-  },
-  // step 2
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'mammals/lion');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'mammals/lion'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('9'));
-  },
-  // step 3
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('7', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Nine-banded Armadillo'), true);
-  },
-  // step 4
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/chimpanzee');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Chimpanzee'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 5
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/chimpanzee'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    RDF.GetLiteral('3'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="greater" value="6"/>
-</conditions>
-<action>
-<checkbox uri="?animal" label="?name"/>
-</action>
-</rule>
-<rule id="rule2">
-<conditions>
-<where subject="?name" rel="contains" value="an"/>
-</conditions>
-<action>
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querytripleandmembermerge.xul
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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"?>
-
-<!--
-  query - triple and member merge
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" unordered="true">
-    <label id="http://www.some-fictitious-zoo.com/reptiles/chameleon" value="Chameleon"/>
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Tarantula"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - triple and member merge";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans/robert">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<triple subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal" object="?child"/>
-<triple subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#pets" object="?pets"/>
-<member container="?pets" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-,<action>
-<label uri="?child" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querytripleobjecttosubject.xul
+++ /dev/null
@@ -1,67 +0,0 @@
-<?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"?>
-
-<!--
-  query - triple object to subject
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-1" id="http://www.some-fictitious-zoo.com/humans/robert" value="Robert"/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/humans/robert" value="Robert"/>
-    <label id="http://www.some-fictitious-zoo.com/humans/sarah" value="Sarah"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - triple object to subject";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    targetds.Unassert(RDF.GetResource(ZOO_NS + 'humans/robert'),
-                      RDF.GetResource(ZOO_NS + 'rdf#favoriteAnimal'),
-                      RDF.GetResource(ZOO_NS + 'arachnids/tarantula'), true);
-  },
-  // step 2
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'humans/robert'),
-                    RDF.GetResource(ZOO_NS + 'rdf#favoriteAnimal'),
-                    RDF.GetResource(ZOO_NS + 'mammals/lion'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids/tarantula">
-<template id="template">
-<query>
-<content uri="?uri"/>
-<triple subject="?human" predicate="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal" object="?uri"/>
-<triple subject="?human" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?humanname"/>
-</query>
-<action>
-<label uri="?human" value="?humanname"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querytwomembers.xul
+++ /dev/null
@@ -1,107 +0,0 @@
-<?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"?>
-
-<!--
-  query - two members
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" unordered="true">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Tarantula"/>
-    <label step="3" id="http://www.some-fictitious-zoo.com/birds/wren" value="Wren"/>
-    <label id="http://www.some-fictitious-zoo.com/birds/emu" value="Emu"/>
-    <label step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" value="Barn Owl"/>
-    <label id="http://www.some-fictitious-zoo.com/birds/raven" value="Raven"/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" value="Archaeopteryx"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" value="Emperor Penguin"/>
-    <label id="http://www.some-fictitious-zoo.com/fish/cod" value="Cod"/>
-    <label id="http://www.some-fictitious-zoo.com/fish/swordfish" value="Swordfish"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/anaconda" value="Anaconda"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/chameleon" value="Chameleon"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - two members";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/all-animals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?childone"/>
-<member container="?childone" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-,<action>
-<label uri="?child" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querytwomembersfiltered.xul
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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"?>
-
-<!--
-  query - two members filtered
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="Mammals"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - two members filtered";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/all-animals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?childone"/>
-<triple subject="?childone" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<member container="?childone" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="LLAMA"/>
-</query>
-,<action>
-<label uri="?child" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querytwotriples.xul
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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"?>
-
-<!--
-  query - two triples
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" unordered="true">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Tarantula"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/anaconda" value="Anaconda"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/chameleon" value="Chameleon"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - two triples";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans/robert">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<triple subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal" object="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-,<action>
-<label uri="?child" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_queryupwardsmember.xul
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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"?>
-
-<!--
-  query - upwards member
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" unordered="true">
-    <label id="http://www.some-fictitious-zoo.com/marked" container="true" empty="false" value="Marked"/>
-    <label id="http://www.some-fictitious-zoo.com/birds" container="true" empty="false" value="Birds"/>
-    <label id="http://www.some-fictitious-zoo.com/sarahs-pets" container="true" empty="false" value="Sarah's Pets"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - upwards member";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds/emu" flags="dont-recurse">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?child" child="?uri"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-,<action>
-<label uri="?child" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_queryupwardsmembertripleandfilteringtriple.xul
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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"?>
-
-<!--
-  query - upwards member, triple and filtering triple
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output" unordered="true">
-    <label id="http://www.some-fictitious-zoo.com/reptiles/anaconda" value="Anaconda"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/chameleon" value="Chameleon"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query - upwards member, triple and filtering triple";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans/robert">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<triple subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal" object="?child"/>
-<member container="?reptiles" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?reptiles" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="Reptiles"/>
-</query>
-,<action>
-<label uri="?child" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_querywithemptyconditions.xul
+++ /dev/null
@@ -1,117 +0,0 @@
-<?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"?>
-
-<!--
-  query with empty conditions
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="3" id="http://www.some-fictitious-zoo.com/mammals/zebra" value="Zebra"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label step="-4" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/mammals/koala" value="Koala"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/mammals/arctichare" value="Arctic Hare"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="query with empty conditions";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/arctichare');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Arctic Hare'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/zebra');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Zebra'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('4', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('African Elephant'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/africanelephant');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('African Elephant'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 6
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/koala'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimensAsString'),
-                    RDF.GetLiteral('8'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions"/>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_referenceasmember.xul
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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"?>
-
-<!--
-  reference as member
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-1" id="http://www.some-fictitious-zoo.com/arachnids" container="true" empty="false" value="Tarantula"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/arachnids" container="true" empty="false" value="Hairy Spider"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="reference as member";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'arachnids/tarantula');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'arachnids/tarantula'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Hairy Spider'));
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<rule id="rule">
-<conditions id="conditions">
-<content uri="?start"/>
-<member container="?start" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</conditions>
-<action id="action">
-<label uri="?start" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_regenerate.xul
+++ /dev/null
@@ -1,49 +0,0 @@
-<?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/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>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_selfgenerationextendedsyntax.xul
+++ /dev/null
@@ -1,66 +0,0 @@
-<?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"?>
-
-<!--
-  self generation - extended syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-1" id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Tarantula"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Hairy Spider"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="self generation - extended syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'arachnids/tarantula');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'arachnids/tarantula'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Hairy Spider'));
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids/tarantula">
-<template id="template">
-<query>
-<content uri="?uri"/>
-</query>
-<rule>
-<bindings>
-<binding subject="?uri" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</bindings>
-<action>
-<label uri="?uri" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_selfgenerationsimplesyntax.xul
+++ /dev/null
@@ -1,53 +0,0 @@
-<?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"?>
-
-<!--
-  self generation - simple syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="self generation - simple syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'arachnids/tarantula');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'arachnids/tarantula'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Hairy Spider'));
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids/tarantula">
-<template id="template">
-<button uri="?" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxenclosedinacontainer.xul
+++ /dev/null
@@ -1,90 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax enclosed in a container
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox>
-      <label step="3" id="http://www.some-fictitious-zoo.com/birds/wren" value="Wren"/>
-      <label id="http://www.some-fictitious-zoo.com/birds/emu" value="Emu"/>
-      <label step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" value="Barn Owl"/>
-      <label id="http://www.some-fictitious-zoo.com/birds/raven" value="Raven"/>
-      <label step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" value="Archaeopteryx"/>
-      <label step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" value="Emperor Penguin"/>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax enclosed in a container";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<hbox>
-<label uri="rdf:*" value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</hbox>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxenclosedinacontainerwitharule.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax enclosed in a container with a rule
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox id="http://www.some-fictitious-zoo.com/birds/emu">
-      <label value="Emu"/>
-    </hbox>
-    <hbox id="http://www.some-fictitious-zoo.com/birds/barnowl">
-      <label value="Barn Owl"/>
-    </hbox>
-    <hbox id="http://www.some-fictitious-zoo.com/birds/raven">
-      <label value="Raven"/>
-    </hbox>
-    <label step="2" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" value="Emperor Penguin"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax enclosed in a container with a rule";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<rule>
-<hbox uri="rdf:*">
-<label value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</hbox>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxfilter.xul
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax - filter
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/birds/barnowl" value="Barn Owl"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax - filter";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" 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>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxfilterwithmultiplerules.xul
+++ /dev/null
@@ -1,97 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax - filter with multiple rules
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-    <label step="-1" id="http://www.some-fictitious-zoo.com/birds/barnowl" value="Barn Owl"/>
-    <button step="4,-5" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Spooky Bird"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/birds/barnowl" value="Barn Owl"/>
-    <button step="1,-3" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Spooky Bird"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/birds/syntheticbarnowl" value="Barn Owl"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax - filter with multiple rules";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/barnowl');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/barnowl'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Spooky Bird'));
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/syntheticbarnowl');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Barn Owl'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 3
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('2', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/barnowl');
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '2', true);
-  },
-  // step 5
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/barnowl');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/barnowl'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Barn Owl'));
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template>
-<rule 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"/>
-</rule>
-<rule>
-<button uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxfilterwithrule.xul
+++ /dev/null
@@ -1,98 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax - filter with rule
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox step="-1" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-      <label value="Barn Owl"/>
-    </hbox>
-    <hbox step="5" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-      <label value="Barn Owl"/>
-    </hbox>
-    <hbox step="2" id="http://www.some-fictitious-zoo.com/birds/syntheticbarnowl">
-      <label value="Barn Owl"/>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax - filter with rule";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/barnowl');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/barnowl'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Spooky Bird'));
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/syntheticbarnowl');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Barn Owl'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 3
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('2', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/barnowl');
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '2', true);
-  },
-  // step 5
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/barnowl');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/barnowl'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Barn Owl'));
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template>
-<rule zoo:name="Barn Owl" xmlns:zoo="http://www.some-fictitious-zoo.com/rdf#">
-<hbox uri="rdf:*">
-<label value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</hbox>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxiteratingoverasinglevalue.xul
+++ /dev/null
@@ -1,86 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax iterating over a single value
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="3" id="http://www.some-fictitious-zoo.com/birds/wren" value="Wren"/>
-    <label id="http://www.some-fictitious-zoo.com/birds/emu" value="Emu"/>
-    <label step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" value="Barn Owl"/>
-    <label id="http://www.some-fictitious-zoo.com/birds/raven" value="Raven"/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" value="Archaeopteryx"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" value="Emperor Penguin"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax iterating over a single value";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<label uri="rdf:*" value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusinganinterveningcontainer.xul
+++ /dev/null
@@ -1,90 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax using an intervening container
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <groupbox>
-      <label step="3" id="http://www.some-fictitious-zoo.com/birds/wren" value="Wren"/>
-      <label id="http://www.some-fictitious-zoo.com/birds/emu" value="Emu"/>
-      <label step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" value="Barn Owl"/>
-      <label id="http://www.some-fictitious-zoo.com/birds/raven" value="Raven"/>
-      <label step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" value="Archaeopteryx"/>
-      <label step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" value="Emperor Penguin"/>
-    </groupbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax using an intervening container";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<groupbox>
-<label uri="rdf:*" value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</groupbox>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingatextnode.xul
+++ /dev/null
@@ -1,50 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax using a textnode
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <description step="3" id="http://www.some-fictitious-zoo.com/birds/wren">Wren</description>
-    <description id="http://www.some-fictitious-zoo.com/birds/emu">Emu</description>
-    <description step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl">Barn Owl</description>
-    <description id="http://www.some-fictitious-zoo.com/birds/raven">Raven</description>
-    <description step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">Archaeopteryx</description>
-    <description step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin">Emperor Penguin</description>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax using a textnode";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<description uri="rdf:*"><textnode value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/></description>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingcontainerasthegenerationelement.xul
+++ /dev/null
@@ -1,100 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax using container as the generation element
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox step="3" id="http://www.some-fictitious-zoo.com/birds/wren">
-      <label value="Wren"/>
-    </hbox>
-    <hbox id="http://www.some-fictitious-zoo.com/birds/emu">
-      <label value="Emu"/>
-    </hbox>
-    <hbox step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-      <label value="Barn Owl"/>
-    </hbox>
-    <hbox id="http://www.some-fictitious-zoo.com/birds/raven">
-      <label value="Raven"/>
-    </hbox>
-    <hbox step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">
-      <label value="Archaeopteryx"/>
-    </hbox>
-    <hbox step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin">
-      <label value="Emperor Penguin"/>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax using container as the generation element";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<hbox uri="rdf:*">
-<label value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</hbox>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingdontrecurse.xul
+++ /dev/null
@@ -1,52 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax using dont-recurse
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox id="http://www.some-fictitious-zoo.com/arachnids" container="true" empty="false">
-      <label value="Arachnids"/>
-    </hbox>
-    <hbox id="http://www.some-fictitious-zoo.com/birds" container="true" empty="false">
-      <label value="Birds"/>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax using dont-recurse";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/some-animals" flags="dont-recurse">
-<template id="template">
-<hbox uri="rdf:*">
-<label value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</hbox>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingrecursivegeneration.xul
+++ /dev/null
@@ -1,109 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax using recursive generation
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox id="http://www.some-fictitious-zoo.com/arachnids" container="true" empty="false">
-      <label value="Arachnids"/>
-      <hbox id="http://www.some-fictitious-zoo.com/arachnids/tarantula">
-        <label value="Tarantula"/>
-      </hbox>
-    </hbox>
-    <hbox id="http://www.some-fictitious-zoo.com/birds" container="true" empty="false">
-      <label value="Birds"/>
-      <hbox step="3" id="http://www.some-fictitious-zoo.com/birds/wren">
-        <label value="Wren"/>
-      </hbox>
-      <hbox id="http://www.some-fictitious-zoo.com/birds/emu">
-        <label value="Emu"/>
-      </hbox>
-      <hbox step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-        <label value="Barn Owl"/>
-      </hbox>
-      <hbox id="http://www.some-fictitious-zoo.com/birds/raven">
-        <label value="Raven"/>
-      </hbox>
-      <hbox step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">
-        <label value="Archaeopteryx"/>
-      </hbox>
-      <hbox step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin">
-        <label value="Emperor Penguin"/>
-      </hbox>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax using recursive generation";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/some-animals">
-<template id="template">
-<hbox uri="rdf:*">
-<label value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</hbox>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxusingrecursivegenerationagain.xul
+++ /dev/null
@@ -1,64 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax using recursive generation again
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox id="http://www.some-fictitious-zoo.com/arachnids" container="true" empty="false">
-      <label value="Arachnids"/>
-      <hbox id="http://www.some-fictitious-zoo.com/arachnids/tarantula">
-        <label value="Tarantula"/>
-      </hbox>
-    </hbox>
-    <hbox id="http://www.some-fictitious-zoo.com/birds" container="true" empty="false">
-      <label value="Birds"/>
-      <hbox id="http://www.some-fictitious-zoo.com/birds/emu">
-        <label value="Emu"/>
-      </hbox>
-      <hbox id="http://www.some-fictitious-zoo.com/birds/barnowl">
-        <label value="Barn Owl"/>
-      </hbox>
-      <hbox id="http://www.some-fictitious-zoo.com/birds/raven">
-        <label value="Raven"/>
-      </hbox>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax using recursive generation again";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/some-animals">
-<template id="template">
-<hbox uri="rdf:*">
-<label value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</hbox>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplesyntaxwithtwovariablesused.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  simple syntax with two variables used
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox id="http://www.some-fictitious-zoo.com/birds/emu">
-      <label value="Emu"/>
-      <label value="12"/>
-    </hbox>
-    <hbox id="http://www.some-fictitious-zoo.com/birds/barnowl">
-      <label value="Barn Owl"/>
-      <label value="4"/>
-    </hbox>
-    <hbox id="http://www.some-fictitious-zoo.com/birds/raven">
-      <label value="Raven"/>
-      <label value="0"/>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple syntax with two variables used";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template id="template">
-<hbox uri="rdf:*">
-<label value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-<label value="rdf:http://www.some-fictitious-zoo.com/rdf#specimens"/>
-</hbox>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutioncaretsatbeginningandend.xul
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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"?>
-
-<!--
-  simple variable substitution - carets at beginning and end
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="^^Before Tarantula^"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple variable substitution - carets at beginning and end";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<label uri="rdf:*" value="^^Before rdf:http://www.some-fictitious-zoo.com/rdf#name^^"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutioncaretsubstitution.xul
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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"?>
-
-<!--
-  simple variable substitution - caret substitution
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Tarantula^ and^^ lots ^ more"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple variable substitution - caret substitution";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<label uri="rdf:*" value="rdf:http://www.some-fictitious-zoo.com/rdf#name^^ and^^ lots ^ more"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionnovariable.xul
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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"?>
-
-<!--
-  simple variable substitution - no variable
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Name"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple variable substitution - no variable";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<label uri="rdf:*" value="Name"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionquestionmarkaspartofvariable.xul
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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"?>
-
-<!--
-  simple variable substitution - question mark as part of variable
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Name is "/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple variable substitution - question mark as part of variable";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<label uri="rdf:*" value="Name is rdf:http://www.some-fictitious-zoo.com/rdf#name?"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionquestionmarksubstitution.xul
+++ /dev/null
@@ -1,56 +0,0 @@
-<?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"?>
-
-<!--
-  simple variable substitution - question mark substitution
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-1" id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Are you a Tarantula  ?"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Are you a Hairy Spider  ?"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple variable substitution - question mark substitution";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'arachnids/tarantula');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'arachnids/tarantula'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Hairy Spider'));
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<label uri="rdf:*" value="Are you a rdf:http://www.some-fictitious-zoo.com/rdf#name ?sample ??"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutiontextandvariable.xul
+++ /dev/null
@@ -1,56 +0,0 @@
-<?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"?>
-
-<!--
-  simple variable substitution - text and variable
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-1" id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Name is Tarantula the Spider"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Name is Hairy Spider the Spider"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple variable substitution - text and variable";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'arachnids/tarantula');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'arachnids/tarantula'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Hairy Spider'));
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<label uri="rdf:*" value="Name is rdf:http://www.some-fictitious-zoo.com/rdf#name the Spider"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionvariableandtextconcatenated.xul
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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"?>
-
-<!--
-  simple variable substitution - variable and text concatenated
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="The Tarantula's Nest"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple variable substitution - variable and text concatenated";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<label uri="rdf:*" value="The rdf:http://www.some-fictitious-zoo.com/rdf#name^'s Nest"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_simplevariablesubstitutionvariablesconcatenated.xul
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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"?>
-
-<!--
-  simple variable substitution - variables concatenated
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Tarantula3"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="simple variable substitution - variables concatenated";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/arachnids">
-<template id="template">
-<label uri="rdf:*" value="rdf:http://www.some-fictitious-zoo.com/rdf#name^rdf:http://www.some-fictitious-zoo.com/rdf#specimens"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortascendinginteger.xul
+++ /dev/null
@@ -1,70 +0,0 @@
-<?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"?>
-
-<!--
-  sort ascending - integers
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label step="-1" id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort ascending - integers";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'mammals/llama');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimensAsString');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(subject, predicate, oldval, RDF.GetLiteral('12'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null"
-      ref="http://www.some-fictitious-zoo.com/mammals" sort="?specimens ?name" sortDirection="ascending" sorthints="integer">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimensAsString" object="?specimens"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortascendingquerysyntax.xul
+++ /dev/null
@@ -1,114 +0,0 @@
-<?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"?>
-
-<!--
-  sort ascending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label step="-4" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/mammals/arctichare" value="Arctic Hare"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/mammals/koala" value="Koala"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label step="3" id="http://www.some-fictitious-zoo.com/mammals/zebra" value="Zebra"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort ascending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/arctichare');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Arctic Hare'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/zebra');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Zebra'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('4', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('African Elephant'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/africanelephant');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('African Elephant'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 6
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/koala'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimensAsString'),
-                    RDF.GetLiteral('8'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sort="?name" sortDirection="ascending">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortascendingtworulesquerysyntax.xul
+++ /dev/null
@@ -1,70 +0,0 @@
-<?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"?>
-
-<!--
-  sort ascending two rules - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <button id="http://www.some-fictitious-zoo.com/mammals/aardvark" label="aardvark"/>
-    <button id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" label="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <button id="http://www.some-fictitious-zoo.com/mammals/llama" label="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <button id="http://www.some-fictitious-zoo.com/mammals/africanelephant" label="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort ascending two rules - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortDirection="ascending" sort="?specimens ?name" sortResource="http://www.some-fictitious-zoo.com/rdf#specimens" sortResource2="http://www.some-fictitious-zoo.com/rdf#name">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions>
-<where subject="?name" rel="contains" value="o"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-<rule>
-<action>
-<button uri="?animal" label="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortascendingtworuleswithcontainerquerysyntax.xul
+++ /dev/null
@@ -1,80 +0,0 @@
-<?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"?>
-
-<!--
-  sort ascending two rules with container - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">
-      <label value="Nine-banded Armadillo"/>
-    </hbox>
-    <button id="http://www.some-fictitious-zoo.com/mammals/aardvark" label="aardvark"/>
-    <button id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" label="HIPPOPOTAMUS"/>
-    <hbox id="http://www.some-fictitious-zoo.com/mammals/lion">
-      <label value="Lion"/>
-    </hbox>
-    <button id="http://www.some-fictitious-zoo.com/mammals/llama" label="LLAMA"/>
-    <hbox id="http://www.some-fictitious-zoo.com/mammals/gorilla">
-      <label value="Gorilla"/>
-    </hbox>
-    <button id="http://www.some-fictitious-zoo.com/mammals/africanelephant" label="African Elephant"/>
-    <hbox id="http://www.some-fictitious-zoo.com/mammals/polarbear">
-      <label value="Polar Bear"/>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort ascending two rules with container - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortDirection="ascending" sort="?specimens ?name" sortResource="http://www.some-fictitious-zoo.com/rdf#specimens" sortResource2="http://www.some-fictitious-zoo.com/rdf#name">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions>
-<where subject="?name" rel="contains" value="o"/>
-</conditions>
-<action id="action">
-<hbox uri="?animal">
-<label value="?name"/>
-</hbox>
-</action>
-</rule>
-<rule>
-<action>
-<button uri="?animal" label="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortascendingtworuleswithdifferentcontainerquerysyntax.xul
+++ /dev/null
@@ -1,84 +0,0 @@
-<?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"?>
-
-<!--
-  sort ascending two rules with different container - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <vbox>
-      <hbox id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">
-        <label value="Nine-banded Armadillo"/>
-      </hbox>
-      <hbox id="http://www.some-fictitious-zoo.com/mammals/lion">
-        <label value="Lion"/>
-      </hbox>
-      <hbox id="http://www.some-fictitious-zoo.com/mammals/gorilla">
-        <label value="Gorilla"/>
-      </hbox>
-      <hbox id="http://www.some-fictitious-zoo.com/mammals/polarbear">
-        <label value="Polar Bear"/>
-      </hbox>
-    </vbox>
-    <button id="http://www.some-fictitious-zoo.com/mammals/aardvark" label="aardvark"/>
-    <button id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" label="HIPPOPOTAMUS"/>
-    <button id="http://www.some-fictitious-zoo.com/mammals/llama" label="LLAMA"/>
-    <button id="http://www.some-fictitious-zoo.com/mammals/africanelephant" label="African Elephant"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort ascending two rules with different container - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortDirection="ascending" sort="?specimens ?name" sortResource="http://www.some-fictitious-zoo.com/rdf#specimens" sortResource2="http://www.some-fictitious-zoo.com/rdf#name">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions>
-<where subject="?name" rel="contains" value="o"/>
-</conditions>
-<action id="action">
-<vbox>
-<hbox uri="?animal">
-<label value="?name"/>
-</hbox>
-</vbox>
-</action>
-</rule>
-<rule>
-<action>
-<button uri="?animal" label="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortdescendingquerysyntax.xul
+++ /dev/null
@@ -1,114 +0,0 @@
-<?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"?>
-
-<!--
-  sort descending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="3" id="http://www.some-fictitious-zoo.com/mammals/zebra" value="Zebra"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/mammals/koala" value="Koala"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/mammals/arctichare" value="Arctic Hare"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label step="-4" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort descending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/arctichare');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Arctic Hare'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/zebra');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Zebra'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('4', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('African Elephant'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/africanelephant');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('African Elephant'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 6
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/koala'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimensAsString'),
-                    RDF.GetLiteral('8'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sort="?name" sortDirection="descending">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortquerymemberandtwotriples.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-  sort query - member and two triples
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/anaconda" value="Anaconda"/>
-    <label id="http://www.some-fictitious-zoo.com/reptiles/chameleon" value="Chameleon"/>
-    <label id="http://www.some-fictitious-zoo.com/birds/emu" value="Emu"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/arachnids/tarantula" value="Tarantula"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort query - member and two triples";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/humans" sortDirection="ascending" sort="?name" sortResource="http://www.some-fictitious-zoo.com/rdf#specimens" sortResource2="http://www.some-fictitious-zoo.com/rdf#name">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?human"/>
-<triple subject="?human" predicate="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal" object="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action>
-<label uri="?child" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortresource2descendingsimplesyntax.xul
+++ /dev/null
@@ -1,52 +0,0 @@
-<?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"?>
-
-<!--
-  sortResource2 descending - simple syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sortResource2 descending - simple syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortDirection="descending" sort="http://www.some-fictitious-zoo.com/rdf#specimens http://www.some-fictitious-zoo.com/rdf#name" sortResource="http://www.some-fictitious-zoo.com/rdf#specimens" sortResource2="http://www.some-fictitious-zoo.com/rdf#name">
-<template id="template">
-<label uri="rdf:*" value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortresource2settopredicateascendingquerysyntax.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  sortResource2 set to predicate ascending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sortResource2 set to predicate ascending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortResource="http://www.some-fictitious-zoo.com/rdf#specimens" sortDirection="ascending" sortResource2="http://www.some-fictitious-zoo.com/rdf#name">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortresource2settopredicatedescendingquerysyntax.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  sortResource2 set to predicate descending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sortResource2 set to predicate descending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortResource="http://www.some-fictitious-zoo.com/rdf#specimens" sortDirection="descending" sortResource2="http://www.some-fictitious-zoo.com/rdf#name">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortresourceascendingquerysyntax.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  sortResource ascending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sortResource ascending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortResource="?name" sortDirection="ascending">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortresourcedescendingquerysyntax.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  sortResource descending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sortResource descending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortResource="?name" sortDirection="descending">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortresourcesettopredicateascendingquerysyntax.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  sortResource set to predicate ascending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sortResource set to predicate ascending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortResource="http://www.some-fictitious-zoo.com/rdf#specimens" sortDirection="ascending">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortresourcesettopredicatedescendingquerysyntax.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  sortResource set to predicate descending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sortResource set to predicate descending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortResource="http://www.some-fictitious-zoo.com/rdf#specimens" sortDirection="descending">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sorttworesourcesasstringsettopredicatedescendingquerysyntax.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  sort two resources as string set to predicate descending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort two resources as string set to predicate descending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortDirection="descending" sort="http://www.some-fictitious-zoo.com/rdf#specimensAsString http://www.some-fictitious-zoo.com/rdf#name">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sorttworesourcessettopredicateascendingquerysyntax.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  sort two resources set to predicate ascending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort two resources set to predicate ascending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortDirection="ascending" sort="http://www.some-fictitious-zoo.com/rdf#specimens http://www.some-fictitious-zoo.com/rdf#name">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sorttwovariablesascendingquerysyntax.xul
+++ /dev/null
@@ -1,119 +0,0 @@
-<?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"?>
-
-<!--
-  sort two variables ascending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label step="-4" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/mammals/arctichare" value="Arctic Hare"/>
-    <label step="2" id="http://www.some-fictitious-zoo.com/mammals/koala" value="Koala"/>
-    <label step="3" id="http://www.some-fictitious-zoo.com/mammals/zebra" value="Zebra"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort two variables ascending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/arctichare');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Arctic Hare'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/zebra');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Zebra'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('4', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('African Elephant'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/africanelephant');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('African Elephant'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 6
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/koala'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimensAsString'),
-                    RDF.GetLiteral('8'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortDirection="ascending" sort="?specimens ?name">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<bindings>
-<binding subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</bindings>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sorttwovariablesascendingsimplesyntax.xul
+++ /dev/null
@@ -1,52 +0,0 @@
-<?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"?>
-
-<!--
-  sort two variables ascending - simple syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort two variables ascending - simple syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortDirection="ascending" sort="http://www.some-fictitious-zoo.com/rdf#specimens http://www.some-fictitious-zoo.com/rdf#name">
-<template id="template">
-<label uri="rdf:*" value="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sorttwovariablesdescendingquerysyntax.xul
+++ /dev/null
@@ -1,64 +0,0 @@
-<?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"?>
-
-<!--
-  sort two variables descending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort two variables descending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sortDirection="descending" sort="?specimens ?name">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<bindings>
-<binding subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</bindings>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_sortunknownascendingquerysyntax.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  sort unknown ascending - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="sort unknown ascending - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals" sort="?other">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_bad_parameters.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-    storage listbox with bad query parameters
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="storage listbox with bad query parameters";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-
-Components.classes["@mozilla.org/consoleservice;1"]
-          .getService(Components.interfaces.nsIConsoleService)
-          .reset();
-
-copyToProfile('animals.sqlite');
-expectedConsoleMessages.push("Error parsing template: the given named parameter is unknown in the SQL query");
-
-var changes = [];
-]]>
-</script>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" 
-              flex="1"  datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-            SELECT * FROM animals WHERE species_id = ? ORDER BY name
-            <param name="bar">2</param>
-        </query>
-        <action>
-            <listitem uri="?" label="?name"/>
-        </action>
-    </template>
-</listbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_bad_parameters_2.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-    storage listbox with bad query parameters
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="storage listbox with bad query parameters";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-
-Components.classes["@mozilla.org/consoleservice;1"]
-          .getService(Components.interfaces.nsIConsoleService)
-          .reset();
-
-copyToProfile('animals.sqlite');
-
-expectedConsoleMessages.push("Error parsing template: the type of a query parameter is wrong");
-
-var changes = [];
-]]>
-</script>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" 
-              flex="1"  datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-            SELECT * FROM animals WHERE species_id = ? ORDER BY name
-            <param type="mysupertype">2</param>
-        </query>
-        <action>
-            <listitem uri="?" label="?name"/>
-        </action>
-    </template>
-</listbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_bad_parameters_3.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-    storage listbox with bad query parameters
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="storage listbox with bad query parameters";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-
-Components.classes["@mozilla.org/consoleservice;1"]
-          .getService(Components.interfaces.nsIConsoleService)
-          .reset();
-
-copyToProfile('animals.sqlite');
-
-expectedConsoleMessages.push("Error parsing template: a query parameter cannot be bound to the SQL query");
-
-var changes = [];
-]]>
-</script>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" 
-              flex="1"  datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-                SELECT * FROM animals WHERE species_id = :spec ORDER BY name
-            <param name="spec" type="int32">5</param>
-            <param>L%</param>
-        </query>
-        <action>
-            <listitem uri="?" label="?name"/>
-        </action>
-    </template>
-</listbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_baddatasource.xul
+++ /dev/null
@@ -1,56 +0,0 @@
-<?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"?>
-
-<!--
-    storage bad datasource
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="storage bad datasource";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-Components.classes["@mozilla.org/consoleservice;1"]
-          .getService(Components.interfaces.nsIConsoleService)
-          .reset();
-
-expectedConsoleMessages.push("Error parsing template: only profile: or file URI are allowed");
-
-
-var changes = [];
-]]>
-</script>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" 
-              flex="1" rows="8"
-              datasources="http://foo.local/animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-            SELECT * FROM animals WHERE species_id = 2 ORDER BY name
-        </query>
-        <action>
-            <listitem uri="?" label="?name"  />
-        </action>
-    </template>
-</listbox>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_badquery.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-    storage bad query
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="storage bad query";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-Components.classes["@mozilla.org/consoleservice;1"]
-          .getService(Components.interfaces.nsIConsoleService)
-          .reset();
-
-copyToProfile('animals.sqlite');
-
-expectedConsoleMessages.push("Error parsing template: syntax error in the SQL query");
-
-
-var changes = [];
-]]>
-</script>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" 
-              flex="1" rows="8"
-              datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-            SELECT * FROM animalssssssss WHERE species_id = 2 ORDER BY 
-        </query>
-        <action>
-            <listitem uri="?" label="?name"  />
-        </action>
-    </template>
-</listbox>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_dynamicparameters.xul
+++ /dev/null
@@ -1,84 +0,0 @@
-<?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"?>
-
-<!--
-    storage listbox with dynamic query parameters
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_storage_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-  <data id="rebuilt-output">
-    <listitem anyid="true" label="Barn Owl"/>
-    <listitem anyid="true" label="Emu"/>
-    <listitem anyid="true" label="Raven"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-copyToProfile('animals.sqlite');
-
-function test_storage_template()
-{
-  var root = document.getElementById("root");
-  expectedOutput = document.getElementById("output");
-  checkResults(root, 0);
-
-  document.getElementById("species-id").textContent = '2';
-  root.builder.addListener(myBuilderListener);
-  root.builder.rebuild();
-}
-
-var myBuilderListener = {
-
-   willRebuild: function(aBuilder) {
-
-   },
-   didRebuild: function (aBuilder) {
-        var root = document.getElementById("root");
-        expectedOutput = document.getElementById("rebuilt-output");
-        checkResults(root, 0);
-        SimpleTest.finish();
-   }
-}
-
-var testid ="storage listbox with dynamic query parameters";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" 
-              flex="1"  datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-             SELECT * FROM animals WHERE species_id = :spec ORDER BY name
-            <param id="species-id" name="spec" type="int32" />
-        </query>
-        <action>
-            <listitem uri="?" label="?name"/>
-        </action>
-    </template>
-</listbox>
-
-
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_listbox.xul
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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"?>
-
-<!--
-    storage simple with listbox
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-      <listitem anyid="true" label="Barn Owl"/>
-      <listitem anyid="true" label="Emu"/>
-      <listitem anyid="true" label="Raven"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-copyToProfile('animals.sqlite');
-
-var testid ="storage simple listbox";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" 
-              flex="1" rows="8"
-              datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-            SELECT * FROM animals WHERE species_id = 2 ORDER BY name
-        </query>
-        <action>
-            <listitem uri="?" label="?name"  />
-        </action>
-    </template>
-</listbox>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_multiqueries.xul
+++ /dev/null
@@ -1,86 +0,0 @@
-<?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"?>
-
-<!--
-    storage listbox with multiqueries
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-      <listitem anyid="true" label="Mammal: African Elephant"/>
-      <listitem anyid="true" label="Mammal: Gorilla" style="font-weight:bold"/>
-      <listitem anyid="true" label="Mammal: HIPPOPOTAMUS"/>
-      <listitem anyid="true" label="Mammal: LAMA"/>
-      <listitem anyid="true" label="Mammal: Lion"/>
-      <listitem anyid="true" label="Mammal: Nine-banded Armadillo" style="font-weight:bold"/>
-      <listitem anyid="true" label="Mammal: Polar Bear"/>
-      <listitem anyid="true" label="Mammal: aardvark"/>
-      <listitem anyid="true" label="Bird: Barn Owl" style="font-style:italic"/>
-      <listitem anyid="true" label="Bird: Emu"/>
-      <listitem anyid="true" label="Bird: Raven"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-copyToProfile('animals.sqlite');
-
-var testid ="storage listbox with multiqueries";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" 
-              flex="1"  datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <queryset>
-            <query>SELECT * FROM animals WHERE species_id = 5 ORDER BY name</query>
-            <rule>
-                <where subject="?id" rel="greater" value="12"/>
-                <action>
-                    <listitem uri="?" label="Mammal: ?name"  style="font-weight:bold"/>
-                </action>
-            </rule>
-            <rule>
-                <action>
-                    <listitem uri="?" label="Mammal: ?name"/>
-                </action>
-            </rule>
-        </queryset>
-        <queryset>
-            <!-- we use aliases on columns just to have different "column names" in the result set
-                to "similate" a result set from another table for example  -->
-            <query>SELECT * FROM animals WHERE species_id = 2 ORDER BY name</query>
-            <rule>
-                <where subject="?id" rel="equals" value="3"/>
-                <action>
-                    <listitem uri="?" label="Bird: ?name"  style="font-style:italic"/>
-                </action>
-            </rule>
-            <rule>
-                <action>
-                    <listitem uri="?" label="Bird: ?name"/>
-                </action>
-            </rule>
-        </queryset>
-    </template>
-</listbox>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_parameters.xul
+++ /dev/null
@@ -1,160 +0,0 @@
-<?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"?>
-
-<!--
-    storage listbox with query parameters
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_storage_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output-birds">
-    <listitem anyid="true" label="Barn Owl"/>
-    <listitem anyid="true" label="Emu"/>
-    <listitem anyid="true" label="Raven"/>
-  </data>
-
-  <data id="output-L">
-    <listitem anyid="true" label="LAMA"/>
-    <listitem anyid="true" label="Lion"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-
-copyToProfile('animals.sqlite');
-SimpleTest.waitForExplicitFinish();
-
-
-function test_storage_template()
-{
-  var root = document.getElementById("root1");
-  expectedOutput = document.getElementById("output-birds");
-  checkResults(root, 0);
-
-root = document.getElementById("root2");
-checkResults(root, 0);
-
-root = document.getElementById("root6");
-checkResults(root, 0);
-
-root = document.getElementById("root3");
-expectedOutput = document.getElementById("output-L");
-checkResults(root, 0);
-
-root = document.getElementById("root4");
-checkResults(root, 0);
-
-root = document.getElementById("root5");
-checkResults(root, 0);
-
-SimpleTest.finish();
-}
-
-
-var testid ="storage listbox with query parameters";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput;
-
-var changes = [];
-]]>
-</script>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root1" 
-              flex="1"  datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-            SELECT * FROM animals WHERE species_id = ? ORDER BY name
-            <param>2</param>
-        </query>
-        <action>
-            <listitem uri="?" label="?name"/>
-        </action>
-    </template>
-</listbox>
-
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root2" 
-              flex="1"  datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-            SELECT * FROM animals WHERE species_id = ? ORDER BY name
-            <param type="int32">2</param>
-        </query>
-        <action>
-            <listitem uri="?" label="?name"/>
-        </action>
-    </template>
-</listbox>
-
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root3" 
-              flex="1"  datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-                SELECT * FROM animals WHERE species_id = :spec AND name like ? ORDER BY name
-            <param name="spec" type="int32">5</param>
-            <param>L%</param>
-        </query>
-        <action>
-            <listitem uri="?" label="?name"/>
-        </action>
-    </template>
-</listbox>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root4" 
-              flex="1"  datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-                SELECT * FROM animals WHERE species_id = ?3 AND name like ?1 ORDER BY name
-            <param index="3" type="int32">5</param>
-            <param index="1">L%</param>
-        </query>
-        <action>
-            <listitem uri="?" label="?name"/>
-        </action>
-    </template>
-</listbox>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root5" 
-              flex="1"  datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-                SELECT * FROM animals WHERE species_id = ?3 AND name like :pattern ORDER BY name
-            <param name="pattern">L%</param>
-            <param index="3" type="int32">5</param>
-        </query>
-        <action>
-            <listitem uri="?" label="?name"/>
-        </action>
-    </template>
-</listbox>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root6" 
-              flex="1"  datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-            SELECT * FROM animals WHERE species_id = ? ORDER BY name
-            <param type="int32">2qsdqsd</param>
-        </query>
-        <action>
-            <listitem uri="?" label="?name"/>
-        </action>
-    </template>
-</listbox>
-
-
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_rule.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-    storage listbox with rule
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-      <listitem anyid="true" label="Gorilla"/>
-      <listitem anyid="true" label="Nine-banded Armadillo"/>
-      <listitem anyid="true" label="Polar Bear"/>
-      <listitem anyid="true" label="aardvark"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-
-SimpleTest.waitForExplicitFinish();
-copyToProfile('animals.sqlite');
-
-var testid ="storage listbox with rule";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<listbox  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" 
-              flex="1" rows="8"
-              datasources="profile:animals.sqlite" ref="." querytype="storage">
-    <template>
-        <query>
-            SELECT * FROM animals WHERE species_id = 5 ORDER BY name
-        </query>
-        <rule>
-            <where subject="?id" rel="greater" value="10"/>
-            <action>
-                <listitem uri="?" label="?name" />
-            </action>
-        </rule>
-    </template>
-</listbox>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_simple.xul
+++ /dev/null
@@ -1,52 +0,0 @@
-<?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"?>
-
-<!--
-    storage simple
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button anyid="true" label="Barn Owl / Tyto alba"/>
-    <button anyid="true" label="Emu / Dromaius novaehollandiae"/>
-    <button anyid="true" label="Raven / Corvus corax"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-copyToProfile('animals.sqlite');
-SimpleTest.waitForExplicitFinish();
-
-var testid ="storage simple";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" 
-      datasources="profile:animals.sqlite" querytype="storage" ref=".">
-<template>
-    <query>SELECT * FROM animals WHERE species_id = 2 ORDER BY name</query>
-    <action>
-        <button uri="?" label="?name / ?specimen"/>
-    </action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_sortintegerasc.xul
+++ /dev/null
@@ -1,75 +0,0 @@
-<?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"?>
-
-<!--
-    storage sort integer asc
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <row anyid="true">  <label value="1"/>  <label value="Tarantula"/> </row>
-    <row anyid="true">  <label value="2"/>  <label value="Emu"/> </row>
-    <row anyid="true">  <label value="3"/>  <label value="Barn Owl"/>  </row>
-    <row anyid="true">  <label value="4"/>  <label value="Raven"/>  </row>
-    <row anyid="true">  <label value="5"/>  <label value="Cod"/>  </row>
-    <row anyid="true">  <label value="6"/>  <label value="Swordfish"/>  </row>
-    <row anyid="true">  <label value="7"/>  <label value="Lion"/>  </row>
-    <row anyid="true">  <label value="8"/>  <label value="HIPPOPOTAMUS"/>  </row>
-    <row anyid="true">  <label value="9"/>  <label value="African Elephant"/>  </row>
-    <row anyid="true">  <label value="10"/>  <label value="LAMA"/>  </row>
-    <row anyid="true">  <label value="11"/>  <label value="Polar Bear"/>  </row>
-    <row anyid="true">  <label value="12"/>  <label value="aardvark"/>  </row>
-    <row anyid="true">  <label value="13"/>  <label value="Nine-banded Armadillo"/>  </row>
-    <row anyid="true">  <label value="14"/>  <label value="Gorilla"/>  </row>
-    <row anyid="true">  <label value="15"/>  <label value="Anaconda"/>  </row>
-    <row anyid="true">  <label value="16"/>  <label value="Chameleon"/>  </row>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-copyToProfile('animals.sqlite');
-
-var testid ="storage sort integer asc";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<grid xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
-    <columns>
-        <column flex="1"/>
-        <column flex="3"/>
-    </columns>
-    <rows id="root" datasources="profile:animals.sqlite" querytype="storage" ref="."
-         sort="?id" sortDirection="ascending">
-        <template>
-            <query>SELECT id, name FROM animals</query>
-            <action>
-                <row uri="?">
-                    <label value="?id"/>
-                    <label value="?name"/>
-                </row>
-            </action>
-        </template>
-    </rows>
-</grid>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_sortintegerdesc.xul
+++ /dev/null
@@ -1,78 +0,0 @@
-<?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"?>
-
-<!--
-    storage sort integer desc
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-      <row anyid="true">  <label value="16"/>  <label value="Chameleon"/>  </row>
-      <row anyid="true">  <label value="15"/>  <label value="Anaconda"/>  </row>
-      <row anyid="true">  <label value="14"/>  <label value="Gorilla"/>  </row>
-      <row anyid="true">  <label value="13"/>  <label value="Nine-banded Armadillo"/>  </row>
-      <row anyid="true">  <label value="12"/>  <label value="aardvark"/>  </row>
-      <row anyid="true">  <label value="11"/>  <label value="Polar Bear"/>  </row>
-      <row anyid="true">  <label value="10"/>  <label value="LAMA"/>  </row>
-      <row anyid="true">  <label value="9"/>  <label value="African Elephant"/>  </row>
-      <row anyid="true">  <label value="8"/>  <label value="HIPPOPOTAMUS"/>  </row>
-      <row anyid="true">  <label value="7"/>  <label value="Lion"/>  </row>
-      <row anyid="true">  <label value="6"/>  <label value="Swordfish"/>  </row>
-      <row anyid="true">  <label value="5"/>  <label value="Cod"/>  </row>
-      <row anyid="true">  <label value="4"/>  <label value="Raven"/>  </row>
-      <row anyid="true">  <label value="3"/>  <label value="Barn Owl"/>  </row>
-      <row anyid="true">  <label value="2"/>  <label value="Emu"/> </row>
-      <row anyid="true">  <label value="1"/>  <label value="Tarantula"/> </row>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-copyToProfile('animals.sqlite');
-
-var testid ="storage sort integer desc";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<grid xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
-    <columns>
-        <column flex="1"/>
-        <column flex="3"/>
-    </columns>
-    <rows id="root" datasources="profile:animals.sqlite" querytype="storage" ref="."
-         sort="?id" sortDirection="descending">
-        <template>
-            <query>SELECT id, name FROM animals</query>
-            <action>
-                <row uri="?">
-                    <label value="?id"/>
-                    <label value="?name"/>
-                </row>
-            </action>
-        </template>
-    </rows>
-</grid>
-
-
-
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_sortstringasc.xul
+++ /dev/null
@@ -1,75 +0,0 @@
-<?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"?>
-
-<!--
-    storage sort string asc
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-      <row anyid="true">  <label value="12"/>  <label value="aardvark"/>  </row>
-      <row anyid="true">  <label value="9"/>  <label value="African Elephant"/>  </row>
-      <row anyid="true">  <label value="15"/>  <label value="Anaconda"/>  </row>
-      <row anyid="true">  <label value="3"/>  <label value="Barn Owl"/>  </row>
-      <row anyid="true">  <label value="16"/>  <label value="Chameleon"/>  </row>
-      <row anyid="true">  <label value="5"/>  <label value="Cod"/>  </row>
-    <row anyid="true">  <label value="2"/>  <label value="Emu"/> </row>
-    <row anyid="true">  <label value="14"/>  <label value="Gorilla"/>  </row>
-    <row anyid="true">  <label value="8"/>  <label value="HIPPOPOTAMUS"/>  </row>
-    <row anyid="true">  <label value="10"/>  <label value="LAMA"/>  </row>
-    <row anyid="true">  <label value="7"/>  <label value="Lion"/>  </row>
-    <row anyid="true">  <label value="13"/>  <label value="Nine-banded Armadillo"/>  </row>
-    <row anyid="true">  <label value="11"/>  <label value="Polar Bear"/>  </row>
-    <row anyid="true">  <label value="4"/>  <label value="Raven"/>  </row>
-    <row anyid="true">  <label value="6"/>  <label value="Swordfish"/>  </row>
-    <row anyid="true">  <label value="1"/>  <label value="Tarantula"/> </row>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-copyToProfile('animals.sqlite');
-
-var testid ="storage sort string asc";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<grid xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
-    <columns>
-        <column flex="1"/>
-        <column flex="3"/>
-    </columns>
-    <rows id="root" datasources="profile:animals.sqlite" querytype="storage" ref="."
-         sort="?name" sortDirection="ascending">
-        <template>
-            <query>SELECT id, name FROM animals</query>
-            <action>
-                <row uri="?">
-                    <label value="?id"/>
-                    <label value="?name"/>
-                </row>
-            </action>
-        </template>
-    </rows>
-</grid>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_sortstringdesc.xul
+++ /dev/null
@@ -1,75 +0,0 @@
-<?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"?>
-
-<!--
-    storage sort string desc
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-      <row anyid="true">  <label value="1"/>  <label value="Tarantula"/> </row>
-      <row anyid="true">  <label value="6"/>  <label value="Swordfish"/>  </row>
-      <row anyid="true">  <label value="4"/>  <label value="Raven"/>  </row>
-      <row anyid="true">  <label value="11"/>  <label value="Polar Bear"/>  </row>
-      <row anyid="true">  <label value="13"/>  <label value="Nine-banded Armadillo"/>  </row>
-      <row anyid="true">  <label value="7"/>  <label value="Lion"/>  </row>
-      <row anyid="true">  <label value="10"/>  <label value="LAMA"/>  </row>
-      <row anyid="true">  <label value="8"/>  <label value="HIPPOPOTAMUS"/>  </row>
-      <row anyid="true">  <label value="14"/>  <label value="Gorilla"/>  </row>
-      <row anyid="true">  <label value="2"/>  <label value="Emu"/> </row>
-      <row anyid="true">  <label value="5"/>  <label value="Cod"/>  </row>
-      <row anyid="true">  <label value="16"/>  <label value="Chameleon"/>  </row>
-      <row anyid="true">  <label value="3"/>  <label value="Barn Owl"/>  </row>
-      <row anyid="true">  <label value="15"/>  <label value="Anaconda"/>  </row>
-      <row anyid="true">  <label value="9"/>  <label value="African Elephant"/>  </row>
-      <row anyid="true">  <label value="12"/>  <label value="aardvark"/>  </row>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-copyToProfile('animals.sqlite');
-
-var testid ="storage sort string desc";
-var queryType = "storage";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<grid xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
-    <columns>
-        <column flex="1"/>
-        <column flex="3"/>
-    </columns>
-    <rows id="root" datasources="profile:animals.sqlite" querytype="storage" ref="."
-         sort="?name" sortDirection="descending">
-        <template>
-            <query>SELECT id, name FROM animals</query>
-            <action>
-                <row uri="?">
-                    <label value="?id"/>
-                    <label value="?name"/>
-                </row>
-            </action>
-        </template>
-    </rows>
-</grid>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_storage_tree.xul
+++ /dev/null
@@ -1,122 +0,0 @@
-<?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"?>
-
-<!--
-    storage tree
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-      <treecols orient="horizontal">
-          <treecol id="species" primary="true" label="Species" flex="2" ordinal="1"/>
-          <treecol id="name" label="Common name" flex="2" ordinal="3"/>
-          <treecol id="specimen" label="Specimen" flex="3" ordinal="5"/>
-          <treecol id="id" label="id" flex="1" ordinal="7"/>
-      </treecols>
-    <treechildren>
-        <treeitem anyid="true"> <treerow>
-                <treecell label="arachnids" /> <treecell label="Tarantula"/>  <treecell label="Avicularia avicularia" /> <treecell label="1"/>
-        </treerow> </treeitem>
-        <treeitem anyid="true"> <treerow>
-            <treecell label="birds" /> <treecell label="Barn Owl"/> <treecell label="Tyto alba" /> <treecell label="3"/>
-        </treerow> </treeitem>
-        <treeitem anyid="true"> <treerow>
-            <treecell label="birds" /> <treecell label="Emu"/> <treecell label="Dromaius novaehollandiae" /> <treecell label="2"/>
-        </treerow> </treeitem>
-        <treeitem anyid="true"> <treerow>
-            <treecell label="birds" /> <treecell label="Raven"/>  <treecell label="Corvus corax" /> <treecell label="4"/>
-        </treerow> </treeitem>
-        <treeitem anyid="true"> <treerow>
-            <treecell label="fish" /> <treecell label="Cod"/> <treecell label="Gadus morhua" /> <treecell label="5"/>
-        </treerow> </treeitem>
-        <treeitem anyid="true"> <treerow>
-                <treecell label="fish" /> <treecell label="Swordfish"/>   <treecell label="Xiphias gladius" /> <treecell label="6"/>
-        </treerow> </treeitem>
-        <treeitem anyid="true"> <treerow>
-            <treecell label="mammals" /> <treecell label="African Elephant"/> <treecell label="Loxodonta africana" /> <treecell label="9"/>
-        </treerow> </treeitem>
-       <treeitem anyid="true"> <treerow>
-            <treecell label="mammals" /> <treecell label="Gorilla"/>  <treecell label="Gorilla gorilla" /> <treecell label="14"/>
-        </treerow> </treeitem>
-       <treeitem anyid="true"> <treerow>
-            <treecell label="mammals" /> <treecell label="HIPPOPOTAMUS"/> <treecell label="Hippopotamus amphibius" /> <treecell label="8"/>
-       </treerow> </treeitem>
-       <treeitem anyid="true"> <treerow>
-            <treecell label="mammals" /> <treecell label="LAMA"/>  <treecell label="Lama glama" /> <treecell label="10"/>
-        </treerow> </treeitem>
-        <treeitem anyid="true"> <treerow>
-                <treecell label="mammals" /> <treecell label="Lion"/>  <treecell label="Panthera leo" /> <treecell label="7"/>
-        </treerow> </treeitem>
-        <treeitem anyid="true"> <treerow>
-            <treecell label="mammals" /> <treecell label="Nine-banded Armadillo"/>  <treecell label="Dasypus novemcinctus" /> <treecell label="13"/>
-        </treerow> </treeitem>
-        <treeitem anyid="true"> <treerow>
-            <treecell label="mammals" /> <treecell label="Polar Bear"/>  <treecell label="Thalarctos maritimus" /> <treecell label="11"/>
-        </treerow> </treeitem>
-       <treeitem anyid="true"> <treerow>
-            <treecell label="mammals" /> <treecell label="aardvark"/> <treecell label="Orycteropus afer" /> <treecell label="12"/>
-        </treerow> </treeitem>
-        <treeitem anyid="true"> <treerow>
-                <treecell label="reptiles" /> <treecell label="Anaconda"/> <treecell label="Eunectes murinus" /> <treecell label="15"/>
-        </treerow> </treeitem>
-       <treeitem anyid="true"> <treerow>
-            <treecell label="reptiles" /> <treecell label="Chameleon"/> <treecell label="Chamaeleo chamaelon" /> <treecell label="16"/>
-        </treerow> </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-copyToProfile('animals.sqlite');
-
-var testid ="storage tree";
-var queryType = "storage";
-var isTreeBuilder = true;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<tree   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" 
-        flex="1" datasources="profile:animals.sqlite" ref="*" querytype="storage" flags="dont-build-content">
-    <treecols>
-        <treecol id="species" primary="true" label="Species" flex="2"/>
-        <treecol id="name" label="Common name" flex="2"/>
-        <treecol id="specimen" label="Specimen" flex="3"/>
-        <treecol id="id" label="id" flex="1"/>
-    </treecols>
-    <template>
-        <query>
-            SELECT a.id, a.name, a.specimen, s.name as species  FROM animals a, species s 
-            WHERE a.species_id = s.id ORDER BY species, a.name</query>
-        <action>
-            <treechildren>
-                <treeitem uri="?">
-                    <treerow>
-                        <treecell label="?species"/>
-                        <treecell label="?name"/>
-                        <treecell label="?specimen"/>
-                        <treecell label="?id"/>
-                    </treerow>
-                </treeitem>
-            </treechildren>
-        </action>
-    </template>
-	</tree>
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntax.xul
+++ /dev/null
@@ -1,158 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - query syntax
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell step="-6" label="12"/>
-          <treecell step="6" label="0"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">
-        <treerow>
-          <treecell label="Archaeopteryx"/>
-          <treecell step="-4"/>
-          <treecell step="4" label="5"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-2" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-        <treerow>
-          <treecell label="Barn Owl"/>
-          <treecell label="4"/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/raven">
-        <treerow>
-          <treecell step="-7" label="Raven"/>
-          <treecell step="7" label="Crow"/>
-          <treecell step="-5" label="0"/>
-          <treecell step="5" label="2"/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - query syntax";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '2', true);
-  },
-  // step 2
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  },
-  // step 3
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'birds/archaeopteryx'),
-                    RDF.GetResource(ZOO_NS + 'rdf#species'),
-                    RDF.GetLiteral('Archaeopteryx lithographica'), true);
-  },
-  // step 4
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'birds/archaeopteryx'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    RDF.GetLiteral('5'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/raven');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/raven'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('2'));
-  },
-  // step 6
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/emu');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/emu'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('0'));
-  },
-  // step 7
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/raven');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/raven'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Crow'));
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" flags="" id="root" ref="http://www.some-fictitious-zoo.com/birds">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<bindings>
-<binding subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</bindings>
-<action>
-<treechildren>
-<treeitem uri="?child">
-<treerow>
-<treecell label="?name"/>
-<treecell label="?specimens"/>
-</treerow>
-</treeitem>
-</treechildren>
-</action>
-</rule>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxnotrecursive.xul
+++ /dev/null
@@ -1,145 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - query syntax not recursive
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/humans/sarah">
-        <treerow>
-          <treecell label="Sarah"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - query syntax not recursive";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'crustaceans/lobster');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Lobster'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'crustaceans'));
-    container.AppendElement(newnode);
-  },
-  // step 4
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 5
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 6
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/marked" flags="dont-recurse" id="root">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<action>
-<treechildren>
-<treeitem uri="?child">
-<treerow>
-<treecell label="?name"/>
-<treecell/>
-</treerow>
-</treeitem>
-</treechildren>
-</action>
-</rule>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxnotrecursivetreebuilder.xul
+++ /dev/null
@@ -1,145 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - query syntax not recursive tree builder
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/humans/sarah">
-        <treerow>
-          <treecell label="Sarah"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="true">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="true" open="">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - query syntax not recursive tree builder";
-var queryType = "rdf";
-var isTreeBuilder = true;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'crustaceans/lobster');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Lobster'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'crustaceans'));
-    container.AppendElement(newnode);
-  },
-  // step 4
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 5
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 6
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/marked" flags="dont-recurse dont-build-content" id="root">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<action>
-<treechildren>
-<treeitem uri="?child">
-<treerow>
-<treecell label="?name"/>
-<treecell/>
-</treerow>
-</treeitem>
-</treechildren>
-</action>
-</rule>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursive.xul
+++ /dev/null
@@ -1,215 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - query syntax recursive
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/humans/sarah">
-        <treerow>
-          <treecell label="Sarah"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/lion">
-            <treerow>
-              <treecell label="Lion"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/hippopotamus">
-            <treerow>
-              <treecell label="HIPPOPOTAMUS"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/africanelephant">
-            <treerow>
-              <treecell label="African Elephant"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem step="2" id="http://www.some-fictitious-zoo.com/mammals/koala">
-            <treerow>
-              <treecell label="Koala"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/llama">
-            <treerow>
-              <treecell label="LLAMA"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/polarbear">
-            <treerow>
-              <treecell label="Polar Bear"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/aardvark">
-            <treerow>
-              <treecell label="aardvark"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">
-            <treerow>
-              <treecell label="Nine-banded Armadillo"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/gorilla">
-            <treerow>
-              <treecell label="Gorilla"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem step="-3" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="3,-4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/crustaceans/lobster">
-            <treerow>
-              <treecell label="Lobster"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - query syntax recursive";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'crustaceans/lobster');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Lobster'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'crustaceans'));
-    container.AppendElement(newnode);
-  },
-  // step 4
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 5
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 6
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/marked" id="root">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<action>
-<treechildren>
-<treeitem uri="?child">
-<treerow>
-<treecell label="?name"/>
-<treecell/>
-</treerow>
-</treeitem>
-</treechildren>
-</action>
-</rule>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursivemultiplerules.xul
+++ /dev/null
@@ -1,268 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - query syntax recursive multiple rules
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/humans/sarah">
-        <treerow>
-          <treecell label="Sarah"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-        <treerow>
-          <treecell/>
-          <treecell label="Is this cool: Mammals?"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" open="true">
-        <treerow>
-          <treecell/>
-          <treecell label="Is this cool: Mammals?"/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/lion">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Lion?"/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/hippopotamus">
-            <treerow>
-              <treecell label="HIPPOPOTAMUS"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/africanelephant">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: African Elephant?"/>
-            </treerow>
-          </treeitem>
-          <treeitem step="2" id="http://www.some-fictitious-zoo.com/mammals/koala">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Koala?"/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/llama">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: LLAMA?"/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/polarbear">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Polar Bear?"/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/aardvark">
-            <treerow>
-              <treecell label="aardvark"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Nine-banded Armadillo?"/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/gorilla">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Gorilla?"/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem step="-3" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="3,-4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="5" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/crustaceans/lobster">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Lobster?"/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/crustaceans/crayfish">
-            <treerow>
-              <treecell label="Crayfish"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - query syntax recursive multiple rules";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/lion', true, true,
-                         '1 matching rule 1');
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/hippopotamus', true, true,
-                         '1 matching rule 2');
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/africanelephant', true, true,
-                         '1 matching rule 1');
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/llama', true, true,
-                         '1 matching rule 1');
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/polarbear', true, true,
-                         '1 matching rule 1');
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/aardvark', true, true,
-                         '1 matching rule 2');
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/ninebandedarmadillo', true, true,
-                         '1 matching rule 1');
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/gorilla', true, true,
-                         '1 matching rule 1');
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/koala', true, true,
-                         '1 matching rule 1');
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'crustaceans/lobster');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Lobster'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'crustaceans'));
-    container.AppendElement(newnode);
-  },
-  // step 4
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'crustaceans/crayfish');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Crayfish'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'crustaceans'));
-    container.AppendElement(newnode);
-  },
-  // step 5
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-    expectConsoleMessage(ZOO_NS + 'crustaceans', ZOO_NS + 'crustaceans/lobster', true, true,
-                         '1 matching rule 1');
-    expectConsoleMessage(ZOO_NS + 'crustaceans', ZOO_NS + 'crustaceans/crayfish', true, true,
-                         '1 matching rule 2');
-  },
-  // step 6
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 7
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true"
-      flags="logging" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/marked" id="root">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions>
-<where subject="?name" rel="contains" value="l" ignorecase="true"/>
-</conditions>
-<action>
-<treechildren>
-<treeitem uri="?child">
-<treerow>
-<treecell/>
-<treecell label="Is this cool: ?name^??"/>
-</treerow>
-</treeitem>
-</treechildren>
-</action>
-</rule>
-<rule>
-<action>
-<treechildren>
-<treeitem uri="?child">
-<treerow>
-<treecell label="?name"/>
-<treecell/>
-</treerow>
-</treeitem>
-</treechildren>
-</action>
-</rule>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursivemultiplerulestreebuilder.xul
+++ /dev/null
@@ -1,230 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - query syntax recursive multiple rules tree builder
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/humans/sarah">
-        <treerow>
-          <treecell label="Sarah"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-        <treerow>
-          <treecell/>
-          <treecell label="Is this cool: Mammals?"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" open="true">
-        <treerow>
-          <treecell/>
-          <treecell label="Is this cool: Mammals?"/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/lion">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Lion?"/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/hippopotamus">
-            <treerow>
-              <treecell label="HIPPOPOTAMUS"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/africanelephant">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: African Elephant?"/>
-            </treerow>
-          </treeitem>
-          <treeitem step="2" id="http://www.some-fictitious-zoo.com/mammals/koala">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Koala?"/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/llama">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: LLAMA?"/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/polarbear">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Polar Bear?"/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/aardvark">
-            <treerow>
-              <treecell label="aardvark"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Nine-banded Armadillo?"/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/gorilla">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Gorilla?"/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem step="-3" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="3,-4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/crustaceans/lobster">
-            <treerow>
-              <treecell/>
-              <treecell label="Is this cool: Lobster?"/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - query syntax recursive multiple rules tree builder";
-var queryType = "rdf";
-var isTreeBuilder = true;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'crustaceans/lobster');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Lobster'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'crustaceans'));
-    container.AppendElement(newnode);
-  },
-  // step 4
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 5
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 6
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/marked" flags=" dont-build-content" id="root">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions>
-<where subject="?name" rel="contains" value="l" ignorecase="true"/>
-</conditions>
-<action>
-<treechildren>
-<treeitem uri="?child">
-<treerow>
-<treecell/>
-<treecell label="Is this cool: ?name^??"/>
-</treerow>
-</treeitem>
-</treechildren>
-</action>
-</rule>
-<rule>
-<action>
-<treechildren>
-<treeitem uri="?child">
-<treerow>
-<treecell label="?name"/>
-<treecell/>
-</treerow>
-</treeitem>
-</treechildren>
-</action>
-</rule>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxrecursivetreebuilder.xul
+++ /dev/null
@@ -1,215 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - query syntax recursive tree builder
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/humans/sarah">
-        <treerow>
-          <treecell label="Sarah"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/lion">
-            <treerow>
-              <treecell label="Lion"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/hippopotamus">
-            <treerow>
-              <treecell label="HIPPOPOTAMUS"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/africanelephant">
-            <treerow>
-              <treecell label="African Elephant"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem step="2" id="http://www.some-fictitious-zoo.com/mammals/koala">
-            <treerow>
-              <treecell label="Koala"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/llama">
-            <treerow>
-              <treecell label="LLAMA"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/polarbear">
-            <treerow>
-              <treecell label="Polar Bear"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/aardvark">
-            <treerow>
-              <treecell label="aardvark"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">
-            <treerow>
-              <treecell label="Nine-banded Armadillo"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/gorilla">
-            <treerow>
-              <treecell label="Gorilla"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem step="-3" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="3,-4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/crustaceans/lobster">
-            <treerow>
-              <treecell label="Lobster"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - query syntax recursive tree builder";
-var queryType = "rdf";
-var isTreeBuilder = true;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'crustaceans/lobster');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Lobster'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'crustaceans'));
-    container.AppendElement(newnode);
-  },
-  // step 4
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 5
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 6
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/marked" flags=" dont-build-content" id="root">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<action>
-<treechildren>
-<treeitem uri="?child">
-<treerow>
-<treecell label="?name"/>
-<treecell/>
-</treerow>
-</treeitem>
-</treechildren>
-</action>
-</rule>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementquerysyntaxtreebuilder.xul
+++ /dev/null
@@ -1,158 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - query syntax tree builder
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell step="-6" label="12"/>
-          <treecell step="6" label="0"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">
-        <treerow>
-          <treecell label="Archaeopteryx"/>
-          <treecell step="-4"/>
-          <treecell step="4" label="5"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-2" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-        <treerow>
-          <treecell label="Barn Owl"/>
-          <treecell label="4"/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/raven">
-        <treerow>
-          <treecell step="-7" label="Raven"/>
-          <treecell step="7" label="Crow"/>
-          <treecell step="-5" label="0"/>
-          <treecell step="5" label="2"/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - query syntax tree builder";
-var queryType = "rdf";
-var isTreeBuilder = true;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '2', true);
-  },
-  // step 2
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  },
-  // step 3
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'birds/archaeopteryx'),
-                    RDF.GetResource(ZOO_NS + 'rdf#species'),
-                    RDF.GetLiteral('Archaeopteryx lithographica'), true);
-  },
-  // step 4
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'birds/archaeopteryx'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    RDF.GetLiteral('5'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/raven');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/raven'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('2'));
-  },
-  // step 6
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/emu');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#specimens');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/emu'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimens'),
-                    oldval, RDF.GetLiteral('0'));
-  },
-  // step 7
-  function(targetds, root) {
-    var subject = RDF.GetResource(ZOO_NS + 'birds/raven');
-    var predicate = RDF.GetResource(ZOO_NS + 'rdf#name');
-    var oldval = targetds.GetTarget(subject, predicate, true);
-    targetds.Change(RDF.GetResource(ZOO_NS + 'birds/raven'),
-                    RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    oldval, RDF.GetLiteral('Crow'));
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" flags="dont-build-content" id="root" ref="http://www.some-fictitious-zoo.com/birds">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<bindings>
-<binding subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</bindings>
-<action>
-<treechildren>
-<treeitem uri="?child">
-<treerow>
-<treecell label="?name"/>
-<treecell label="?specimens"/>
-</treerow>
-</treeitem>
-</treechildren>
-</action>
-</rule>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxnotrecursive.xul
+++ /dev/null
@@ -1,136 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - simple syntax not recursive
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/humans/sarah">
-        <treerow>
-          <treecell label="Sarah"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - simple syntax not recursive";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'crustaceans/lobster');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Lobster'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'crustaceans'));
-    container.AppendElement(newnode);
-  },
-  // step 4
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 5
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 6
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" flags="dont-recurse" ref="http://www.some-fictitious-zoo.com/marked" id="root">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<treechildren>
-<treeitem uri="rdf:*">
-<treerow>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-<treecell/>
-</treerow>
-</treeitem>
-</treechildren>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxnotrecursivetreebuilder.xul
+++ /dev/null
@@ -1,136 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - simple syntax not recursive tree builder
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/humans/sarah">
-        <treerow>
-          <treecell label="Sarah"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="true">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="true" open="">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - simple syntax not recursive tree builder";
-var queryType = "rdf";
-var isTreeBuilder = true;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'crustaceans/lobster');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Lobster'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'crustaceans'));
-    container.AppendElement(newnode);
-  },
-  // step 4
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 5
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 6
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" flags="dont-recurse dont-build-content" ref="http://www.some-fictitious-zoo.com/marked" id="root">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<treechildren>
-<treeitem uri="rdf:*">
-<treerow>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-<treecell/>
-</treerow>
-</treeitem>
-</treechildren>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxrecursive.xul
+++ /dev/null
@@ -1,206 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - simple syntax recursive
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/humans/sarah">
-        <treerow>
-          <treecell label="Sarah"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/lion">
-            <treerow>
-              <treecell label="Lion"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/hippopotamus">
-            <treerow>
-              <treecell label="HIPPOPOTAMUS"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/africanelephant">
-            <treerow>
-              <treecell label="African Elephant"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem step="2" id="http://www.some-fictitious-zoo.com/mammals/koala">
-            <treerow>
-              <treecell label="Koala"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/llama">
-            <treerow>
-              <treecell label="LLAMA"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/polarbear">
-            <treerow>
-              <treecell label="Polar Bear"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/aardvark">
-            <treerow>
-              <treecell label="aardvark"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">
-            <treerow>
-              <treecell label="Nine-banded Armadillo"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/gorilla">
-            <treerow>
-              <treecell label="Gorilla"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem step="-3" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="3,-4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/crustaceans/lobster">
-            <treerow>
-              <treecell label="Lobster"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - simple syntax recursive";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'crustaceans/lobster');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Lobster'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'crustaceans'));
-    container.AppendElement(newnode);
-  },
-  // step 4
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 5
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 6
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" flags="" ref="http://www.some-fictitious-zoo.com/marked" id="root">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<treechildren>
-<treeitem uri="rdf:*">
-<treerow>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-<treecell/>
-</treerow>
-</treeitem>
-</treechildren>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementsimplesyntaxrecursivetreebuilder.xul
+++ /dev/null
@@ -1,206 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - simple syntax recursive tree builder
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem id="http://www.some-fictitious-zoo.com/humans/sarah">
-        <treerow>
-          <treecell label="Sarah"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/mammals" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Mammals"/>
-          <treecell/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/lion">
-            <treerow>
-              <treecell label="Lion"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/hippopotamus">
-            <treerow>
-              <treecell label="HIPPOPOTAMUS"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/africanelephant">
-            <treerow>
-              <treecell label="African Elephant"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem step="2" id="http://www.some-fictitious-zoo.com/mammals/koala">
-            <treerow>
-              <treecell label="Koala"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/llama">
-            <treerow>
-              <treecell label="LLAMA"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/polarbear">
-            <treerow>
-              <treecell label="Polar Bear"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/aardvark">
-            <treerow>
-              <treecell label="aardvark"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo">
-            <treerow>
-              <treecell label="Nine-banded Armadillo"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-          <treeitem id="http://www.some-fictitious-zoo.com/mammals/gorilla">
-            <treerow>
-              <treecell label="Gorilla"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem step="-3" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="3,-4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="4" id="http://www.some-fictitious-zoo.com/crustaceans" container="true" empty="false" open="true">
-        <treerow>
-          <treecell label="Crustaceans"/>
-          <treecell/>
-        </treerow>
-        <treechildren>
-          <treeitem id="http://www.some-fictitious-zoo.com/crustaceans/lobster">
-            <treerow>
-              <treecell label="Lobster"/>
-              <treecell/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - simple syntax recursive tree builder";
-var queryType = "rdf";
-var isTreeBuilder = true;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'crustaceans/lobster');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Lobster'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'crustaceans'));
-    container.AppendElement(newnode);
-  },
-  // step 4
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 5
-  function(targetds, root) {
-    if (root.view && 11 < root.view.rowCount  && root.view.isContainer(11))
-    root.view.toggleOpenState(11);
-  },
-  // step 6
-  function(targetds, root) {
-    if (root.view && 1 < root.view.rowCount  && root.view.isContainer(1))
-    root.view.toggleOpenState(1);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" flags="dont-build-content" ref="http://www.some-fictitious-zoo.com/marked" id="root">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-<treecol label="Species"/>
-</treecols>
-<template id="template">
-<treechildren>
-<treeitem uri="rdf:*">
-<treerow>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-<treecell/>
-</treerow>
-</treeitem>
-</treechildren>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementtreecell.xul
+++ /dev/null
@@ -1,133 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - treecell
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem step="3" id="http://www.some-fictitious-zoo.com/birds/wren">
-        <treerow>
-          <treecell label="Wren"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell label="Dromaius novaehollandiae"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-        <treerow>
-          <treecell label="Barn Owl"/>
-          <treecell label="Tyto alba"/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/raven">
-        <treerow>
-          <treecell label="Raven"/>
-          <treecell label="Corvus corax"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">
-        <treerow>
-          <treecell label="Archaeopteryx"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin">
-        <treerow>
-          <treecell label="Emperor Penguin"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - treecell";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds" hidevscroll="true" hidehscroll="true">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-<treecol label="Species" ordinal="3"/>
-</treecols>
-<template id="template">
-<treechildren id="treechildren">
-<treeitem uri="rdf:*">
-<treerow>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#species"/>
-</treerow>
-</treeitem>
-</treechildren>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementtreecellsortascending.xul
+++ /dev/null
@@ -1,133 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - treecell sort ascending
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1" sort="rdf:http://www.some-fictitious-zoo.com/rdf#name" sortDirection="ascending" sortActive="true"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">
-        <treerow>
-          <treecell label="Archaeopteryx"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-        <treerow>
-          <treecell label="Barn Owl"/>
-          <treecell label="Tyto alba"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin">
-        <treerow>
-          <treecell label="Emperor Penguin"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell label="Dromaius novaehollandiae"/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/raven">
-        <treerow>
-          <treecell label="Raven"/>
-          <treecell label="Corvus corax"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="3" id="http://www.some-fictitious-zoo.com/birds/wren">
-        <treerow>
-          <treecell label="Wren"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - treecell sort ascending";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" flags="" sort="rdf:http://www.some-fictitious-zoo.com/rdf#name" sortDirection="ascending" id="root" ref="http://www.some-fictitious-zoo.com/birds">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name" ordinal="1" sort="rdf:http://www.some-fictitious-zoo.com/rdf#name" sortDirection="ascending" sortActive="true"/>
-<treecol label="Species" ordinal="3"/>
-</treecols>
-<template id="template">
-<treechildren id="treechildren">
-<treeitem uri="rdf:*">
-<treerow>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#species"/>
-</treerow>
-</treeitem>
-</treechildren>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementtreecellsortascendingtreebuilder.xul
+++ /dev/null
@@ -1,133 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - treecell sort ascending tree builder
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1" sort="rdf:http://www.some-fictitious-zoo.com/rdf#name" sortDirection="ascending" sortActive="true"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">
-        <treerow>
-          <treecell label="Archaeopteryx"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-        <treerow>
-          <treecell label="Barn Owl"/>
-          <treecell label="Tyto alba"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin">
-        <treerow>
-          <treecell label="Emperor Penguin"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell label="Dromaius novaehollandiae"/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/raven">
-        <treerow>
-          <treecell label="Raven"/>
-          <treecell label="Corvus corax"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="3" id="http://www.some-fictitious-zoo.com/birds/wren">
-        <treerow>
-          <treecell label="Wren"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - treecell sort ascending tree builder";
-var queryType = "rdf";
-var isTreeBuilder = true;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" flags="dont-build-content" sort="rdf:http://www.some-fictitious-zoo.com/rdf#name" sortDirection="ascending" id="root" ref="http://www.some-fictitious-zoo.com/birds">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name" ordinal="1" sort="rdf:http://www.some-fictitious-zoo.com/rdf#name" sortDirection="ascending" sortActive="true"/>
-<treecol label="Species" ordinal="3"/>
-</treecols>
-<template id="template">
-<treechildren id="treechildren">
-<treeitem uri="rdf:*">
-<treerow>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#species"/>
-</treerow>
-</treeitem>
-</treechildren>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementtreecelltreebuilder.xul
+++ /dev/null
@@ -1,133 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - treecell tree builder
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-      <treecol label="Species" ordinal="3"/>
-    </treecols>
-    <treechildren>
-      <treeitem step="3" id="http://www.some-fictitious-zoo.com/birds/wren">
-        <treerow>
-          <treecell label="Wren"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu">
-        <treerow>
-          <treecell label="Emu"/>
-          <treecell label="Dromaius novaehollandiae"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl">
-        <treerow>
-          <treecell label="Barn Owl"/>
-          <treecell label="Tyto alba"/>
-        </treerow>
-      </treeitem>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/raven">
-        <treerow>
-          <treecell label="Raven"/>
-          <treecell label="Corvus corax"/>
-        </treerow>
-      </treeitem>
-      <treeitem step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx">
-        <treerow>
-          <treecell label="Archaeopteryx"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin">
-        <treerow>
-          <treecell label="Emperor Penguin"/>
-          <treecell/>
-        </treerow>
-      </treeitem>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - treecell tree builder";
-var queryType = "rdf";
-var isTreeBuilder = true;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = true;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" flags="dont-build-content" id="root" ref="http://www.some-fictitious-zoo.com/birds">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-<treecol label="Species" ordinal="3"/>
-</treecols>
-<template id="template">
-<treechildren id="treechildren">
-<treeitem uri="rdf:*">
-<treerow>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-<treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#species"/>
-</treerow>
-</treeitem>
-</treechildren>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementtreeitemonly.xul
+++ /dev/null
@@ -1,96 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - treeitem only
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1"/>
-    </treecols>
-    <treechildren>
-      <treeitem step="3" id="http://www.some-fictitious-zoo.com/birds/wren" label="Wren"/>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-      <treeitem step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-      <treeitem step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" label="Archaeopteryx"/>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" label="Emperor Penguin"/>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - treeitem only";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds" hidevscroll="true" hidehscroll="true">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name"/>
-</treecols>
-<template id="template">
-<treechildren id="treechildren">
-<treeitem uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</treechildren>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_treeelementtreeitemsortascending.xul
+++ /dev/null
@@ -1,96 +0,0 @@
-<?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"?>
-
-<!--
-  tree element - treeitem sort ascending
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <treecols id="treecols" orient="horizontal">
-      <treecol id="treecol" primary="true" label="Name" ordinal="1" sort="rdf:http://www.some-fictitious-zoo.com/rdf#name" sortDirection="ascending" sortActive="true"/>
-    </treecols>
-    <treechildren>
-      <treeitem step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" label="Archaeopteryx"/>
-      <treeitem step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-      <treeitem step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" label="Emperor Penguin"/>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-      <treeitem id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-      <treeitem step="3" id="http://www.some-fictitious-zoo.com/birds/wren" label="Wren"/>
-    </treechildren>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="tree element - treeitem sort ascending";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<tree xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" hidevscroll="true" hidehscroll="true" datasources="rdf:null" sort="rdf:http://www.some-fictitious-zoo.com/rdf#name" sortDirection="ascending" id="root" ref="http://www.some-fictitious-zoo.com/birds">
-<treecols orient="horizontal" id="treecols">
-<treecol id="treecol" primary="true" label="Name" ordinal="1" sort="rdf:http://www.some-fictitious-zoo.com/rdf#name" sortDirection="ascending" sortActive="true"/>
-</treecols>
-<template id="template">
-<treechildren id="treechildren">
-<treeitem uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-</treechildren>
-</template>
-</tree>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_twogenerationnodes.xul
+++ /dev/null
@@ -1,100 +0,0 @@
-<?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"?>
-
-<!--
-  two generation nodes
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button step="3" id="http://www.some-fictitious-zoo.com/birds/wren" label="Wren"/>
-    <button step="3" id="http://www.some-fictitious-zoo.com/birds/wren" label="Wren"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/emu" label="Emu"/>
-    <button step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-    <button step="-4" id="http://www.some-fictitious-zoo.com/birds/barnowl" label="Barn Owl"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-    <button id="http://www.some-fictitious-zoo.com/birds/raven" label="Raven"/>
-    <button step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" label="Archaeopteryx"/>
-    <button step="2" id="http://www.some-fictitious-zoo.com/birds/archaeopteryx" label="Archaeopteryx"/>
-    <button step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" label="Emperor Penguin"/>
-    <button step="1" id="http://www.some-fictitious-zoo.com/birds/emperorpenguin" label="Emperor Penguin"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="two generation nodes";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/emperorpenguin');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Emperor Penguin'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/archaeopteryx');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Archaeopteryx'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'birds/wren');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Wren'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'birds'));
-    var removednode = container.RemoveElementAt('3', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('Barn Owl'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/birds">
-<template>
-<query>
-<content uri="?uri"/>
-<member container="?uri" child="?child"/>
-<triple subject="?child" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<action>
-<button uri="?child" label="?name"/>
-<button uri="?child" label="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereafterignorecase.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  where - after ignore case
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - after ignore case";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="after" ignorecase="true" value="l"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereafterlowercase.xul
+++ /dev/null
@@ -1,63 +0,0 @@
-<?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"?>
-
-<!--
-  where - after lowercase
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - after lowercase";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = true;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="after" value="l"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereafternegation.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  where - after negation
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - after negation";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="after" negate="true" value="H"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereafteruppercase.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  where - after uppercase
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - after uppercase";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="after" value="L"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherebeforeignorecase.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  where - before ignore case
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - before ignore case";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = true;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="before" ignorecase="true" value="h"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherebeforelowercase.xul
+++ /dev/null
@@ -1,64 +0,0 @@
-<?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"?>
-
-<!--
-  where - before lowercase
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - before lowercase";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = true;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="before" value="l"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherebeforenegation.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-  where - before negation
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - before negation";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="before" negate="true" value="N"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherebeforeuppercase.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  where - before uppercase
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - before uppercase";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="before" value="H"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherecontains.xul
+++ /dev/null
@@ -1,113 +0,0 @@
-<?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"?>
-
-<!--
-  where - contains
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="3" id="http://www.some-fictitious-zoo.com/mammals/zebra" value="Zebra"/>
-    <label step="-4" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/mammals/arctichare" value="Arctic Hare"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - contains";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/arctichare');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Arctic Hare'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/zebra');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Zebra'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('4', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('African Elephant'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/africanelephant');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('African Elephant'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 6
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/koala'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimensAsString'),
-                    RDF.GetLiteral('8'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="contains" value="e"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherecontainsignorecase.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  where - contains ignore case
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - contains ignore case";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="contains" ignorecase="true" value="P"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherecontainsnegation.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  where - contains negation
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - contains negation";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="contains" negate="true" value="a"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherecontainsnumber.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  where - contains number
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="2"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="20"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="2"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - contains number";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="contains" value="2"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?specimens"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherecontainsnumberstring.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  where - contains number string
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="2"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="20"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="2"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - contains number string";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimensAsString" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="contains" value="2"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?specimens"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherecontainsresource.xul
+++ /dev/null
@@ -1,57 +0,0 @@
-<?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"?>
-
-<!--
-  where - contains resource
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - contains resource";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?animal" rel="contains" value="/llama"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherecontainstwo.xul
+++ /dev/null
@@ -1,113 +0,0 @@
-<?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"?>
-
-<!--
-  where - contains two
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-4" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/mammals/arctichare" value="Arctic Hare"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - contains two";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/arctichare');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Arctic Hare'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/zebra');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Zebra'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('4', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('African Elephant'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/africanelephant');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('African Elephant'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 6
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/koala'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimensAsString'),
-                    RDF.GetLiteral('8'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="contains" value="i"/>
-<where subject="?name" rel="contains" value="r"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereendswith.xul
+++ /dev/null
@@ -1,57 +0,0 @@
-<?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"?>
-
-<!--
-  where - endswith
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - endswith";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="endswith" value="a"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereendswithignorecase.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-  where - endswith ignore case
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - endswith ignore case";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="endswith" ignorecase="true" value="A"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereendswithnegation.xul
+++ /dev/null
@@ -1,63 +0,0 @@
-<?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"?>
-
-<!--
-  where - endswith negation
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - endswith negation";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="endswith" negate="true" value="k"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequals.xul
+++ /dev/null
@@ -1,109 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-4" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/arctichare');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Arctic Hare'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/zebra');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Zebra'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('4', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('African Elephant'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/africanelephant');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('African Elephant'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 6
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/koala'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimensAsString'),
-                    RDF.GetLiteral('8'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="equals" value="African Elephant"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalsignorecase.xul
+++ /dev/null
@@ -1,57 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals ignore case
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals ignore case";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="equals" ignorecase="true" value="GoriLLA"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalsmultiple.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals multiple
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals multiple";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="equals" multiple="true" value="Lion,Gorilla"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalsmultiplenegation.xul
+++ /dev/null
@@ -1,125 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals multiple negation
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="3" id="http://www.some-fictitious-zoo.com/mammals/zebra" value="Zebra"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label step="-4" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label step="1" id="http://www.some-fictitious-zoo.com/mammals/arctichare" value="Arctic Hare"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals multiple negation";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/arctichare');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Arctic Hare'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/arctichare', true, true,
-                         '1 matching rule 1');
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/koala', true, false,
-                         '1 (didn\'t match a rule)');
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/zebra');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Zebra'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '1', true);
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/zebra', true, true,
-                         '1 matching rule 1');
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('4', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('African Elephant'), true);
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/africanelephant', false, true,
-                         '1 (no new active query)');
-  },
-  // step 5
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/africanelephant');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('African Elephant'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-    expectConsoleMessage(ZOO_NS + 'mammals', ZOO_NS + 'mammals/africanelephant', true, true,
-                         '1 matching rule 1');
-  },
-  // step 6
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/koala'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimensAsString'),
-                    RDF.GetLiteral('8'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" flags="logging"
-      datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="equals" multiple="true" negate="true" value="Lion,aardvark,LLAMA,Gorilla,Koala"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalsmultiplenegationignorecase.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals multiple negation ignore case
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals multiple negation ignore case";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="equals" multiple="true" ignorecase="true" negate="true" value="Lion,Aardvark,llama,Polar BEAR"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalsnegation.xul
+++ /dev/null
@@ -1,63 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals negation
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals negation";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="equals" negate="true" value="Polar Bear"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalsnegationignorecase.xul
+++ /dev/null
@@ -1,63 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals negation ignore case
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals negation ignore case";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="equals" negate="true" ignorecase="true" value="AFRICAN Elephant"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalsnegationwrongcase.xul
+++ /dev/null
@@ -1,64 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals negation wrong case
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals negation wrong case";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="equals" negate="true" value="Llama"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalsnumber.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals number
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="2"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="2"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals number";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="equals" value="2"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?specimens"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalsothervariable.xul
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals other variable
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals other variable";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?othername"/>
-</query>
-<rule id="rule">
-<conditions id="conditions">
-<where subject="?name" rel="equals" value="?othername"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalsresource.xul
+++ /dev/null
@@ -1,57 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals resource
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals resource";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?animal" rel="equals" value="http://www.some-fictitious-zoo.com/mammals/polarbear"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalssamevariable.xul
+++ /dev/null
@@ -1,64 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals same variable
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals same variable";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="equals" value="?name"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereequalswrongcase.xul
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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"?>
-
-<!--
-  where - equals wrong case
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - equals wrong case";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="equals" value="Llama"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wheregreater.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  where - greater
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="14"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="5"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="20"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="7"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - greater";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="greater" value="4"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?specimens"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wheregreaternegation.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  where - greater negation
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="4"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="2"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="2"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="1"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - greater negation";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="greater" negate="true" value="4"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?specimens"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wheregreaternegationstring.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  where - greater negation string
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="4"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="2"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="2"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="1"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - greater negation string";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimensAsString" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="greater" negate="true" value="4"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?specimens"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wheregreaterstring.xul
+++ /dev/null
@@ -1,113 +0,0 @@
-<?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"?>
-
-<!--
-  where - greater string
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label step="-4" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="14"/>
-    <label step="6" id="http://www.some-fictitious-zoo.com/mammals/koala" value="8"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="5"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="20"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="7"/>
-    <label step="5" id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="14"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - greater string";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/arctichare');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Arctic Hare'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/zebra');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Zebra'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('4', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('African Elephant'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/africanelephant');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('African Elephant'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 6
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/koala'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimensAsString'),
-                    RDF.GetLiteral('8'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimensAsString" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="greater" value="4"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?specimens"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_whereless.xul
+++ /dev/null
@@ -1,62 +0,0 @@
-<?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"?>
-
-<!--
-  where - less
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="4"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="2"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="5"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="2"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="1"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="7"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - less";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="less" value="14"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?specimens"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherelessnegation.xul
+++ /dev/null
@@ -1,61 +0,0 @@
-<?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"?>
-
-<!--
-  where - less negation
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="4"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="14"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="5"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="20"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="7"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - less negation";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimens" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="less" negate="true" value="4"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?specimens"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherelessnegationstring.xul
+++ /dev/null
@@ -1,61 +0,0 @@
-<?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"?>
-
-<!--
-  where - less negation string
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="4"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="14"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="5"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="20"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="7"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - less negation string";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimensAsString" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="less" negate="true" value="4"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?specimens"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherelessstring.xul
+++ /dev/null
@@ -1,62 +0,0 @@
-<?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"?>
-
-<!--
-  where - less string
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="4"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="2"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="5"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="2"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="1"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="7"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - less string";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#specimensAsString" object="?specimens"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?specimens" rel="less" value="14"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?specimens"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherenorel.xul
+++ /dev/null
@@ -1,69 +0,0 @@
-<?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"?>
-
-<!--
-  where - no rel
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-expectLoggedMessages = function()
-{
-  expectedConsoleMessages.push("Error parsing template: <where> element is missing a rel attribute");
-}
-
-var testid ="where - no rel";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" value="Lion"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherenosubject.xul
+++ /dev/null
@@ -1,69 +0,0 @@
-<?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"?>
-
-<!--
-  where - no subject
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-expectLoggedMessages = function()
-{
-  expectedConsoleMessages.push("Error parsing template: <where> element is missing a subject attribute");
-}
-
-var testid ="where - no subject";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where rel="startswith" value="d"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherenovalue.xul
+++ /dev/null
@@ -1,69 +0,0 @@
-<?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"?>
-
-<!--
-  where - no value
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-expectLoggedMessages = function()
-{
-  expectedConsoleMessages.push("Error parsing template: <where> element is missing a value attribute");
-}
-
-var testid ="where - no value";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="startswith"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherestartswith.xul
+++ /dev/null
@@ -1,108 +0,0 @@
-<?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"?>
-
-<!--
-  where - startswith
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - startswith";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [
-  // step 1
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/arctichare');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Arctic Hare'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 2
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/koala');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Koala'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '4', true);
-  },
-  // step 3
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/zebra');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('Zebra'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.InsertElementAt(newnode, '1', true);
-  },
-  // step 4
-  function(targetds, root) {
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    var removednode = container.RemoveElementAt('4', true);
-    targetds.Unassert(removednode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                      RDF.GetLiteral('African Elephant'), true);
-  },
-  // step 5
-  function(targetds, root) {
-    var newnode = RDF.GetResource(ZOO_NS + 'mammals/africanelephant');
-    targetds.Assert(newnode, RDF.GetResource(ZOO_NS + 'rdf#name'),
-                    RDF.GetLiteral('African Elephant'), true);
-    var container = ContainerUtils.MakeSeq(targetds,
-                      RDF.GetResource(ZOO_NS + 'mammals'));
-    container.AppendElement(newnode);
-  },
-  // step 6
-  function(targetds, root) {
-    targetds.Assert(RDF.GetResource(ZOO_NS + 'mammals/koala'),
-                    RDF.GetResource(ZOO_NS + 'rdf#specimensAsString'),
-                    RDF.GetLiteral('8'), true);
-  }
-];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="startswith" value="a"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherestartswithignorecase.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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"?>
-
-<!--
-  where - startswith ignore case
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - startswith ignore case";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="startswith" ignorecase="true" value="a"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherestartswithmultiple.xul
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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"?>
-
-<!--
-  where - startswith multiple
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - startswith multiple";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="startswith" multiple="true" value="L,A"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherestartswithnegation.xul
+++ /dev/null
@@ -1,62 +0,0 @@
-<?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"?>
-
-<!--
-  where - startswith negation
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - startswith negation";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="startswith" negate="true" value="L"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherestartswithunknownvariable.xul
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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"?>
-
-<!--
-  where - startswith unknown variable
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output"/>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - startswith unknown variable";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="startswith" value="?unknown"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wherestartswithvariable.xul
+++ /dev/null
@@ -1,64 +0,0 @@
-<?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"?>
-
-<!--
-  where - startswith variable
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/lion" value="Lion"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/hippopotamus" value="HIPPOPOTAMUS"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/llama" value="LLAMA"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/polarbear" value="Polar Bear"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/aardvark" value="aardvark"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/ninebandedarmadillo" value="Nine-banded Armadillo"/>
-    <label id="http://www.some-fictitious-zoo.com/mammals/gorilla" value="Gorilla"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - startswith variable";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="?name" rel="startswith" value="?name"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wheresubjectequalsvariable.xul
+++ /dev/null
@@ -1,57 +0,0 @@
-<?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"?>
-
-<!--
-  where - subject equals variable
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - subject equals variable";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="African Elephant" rel="equals" value="?name"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_wheresubjectstartswithvariable.xul
+++ /dev/null
@@ -1,57 +0,0 @@
-<?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"?>
-
-<!--
-  where - subject startswith variable
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label id="http://www.some-fictitious-zoo.com/mammals/africanelephant" value="African Elephant"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="where - subject startswith variable";
-var queryType = "rdf";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="rdf:null" ref="http://www.some-fictitious-zoo.com/mammals">
-<template id="template">
-<query id="query">
-<content uri="?uri"/>
-<member container="?uri" child="?animal"/>
-<triple subject="?animal" predicate="http://www.some-fictitious-zoo.com/rdf#name" object="?name"/>
-</query>
-<rule>
-<conditions id="conditions">
-<where subject="African Elephantitis" rel="startswith" value="?name"/>
-</conditions>
-<action id="action">
-<label uri="?animal" value="?name"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerysimple.xul
+++ /dev/null
@@ -1,48 +0,0 @@
-<?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"?>
-
-<!--
-  xml query simple
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Chamaeleo-chamaelon" label="Chameleon 2"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Dromaius-novaehollandiae" label="Emu 12"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Tyto-alba" label="Barn Owl 4"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Corvus-corax" label="Raven 0"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query simple";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="animals.xml" querytype="xml" ref=".">
-<template expr="class/species">
-<button uri="?" label="?name ?specimens"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithassign.xul
+++ /dev/null
@@ -1,68 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with assign
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Chamaeleo-chamaelon">
-      <button label="Chameleon"/>
-      <label value="9"/>
-    </hbox>
-    <hbox id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Dromaius-novaehollandiae">
-      <button label="Emu"/>
-      <label value="3"/>
-    </hbox>
-    <hbox id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Tyto-alba">
-      <button label="Barn Owl"/>
-      <label value="8"/>
-    </hbox>
-    <hbox id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Corvus-corax">
-      <button label="Raven"/>
-      <label value="5"/>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with assign";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="animals.xml" querytype="xml" ref=".">
-<template>
-<query expr="class/species">
-<assign var="?length" expr="string-length(@name)"/>
-</query>
-<action>
-<hbox uri="?">
-<button label="?name"/>
-<label value="?length"/>
-</hbox>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithassignmentandcondition.xul
+++ /dev/null
@@ -1,69 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with assignment and condition
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox anyid="true" container="true" empty="false">
-      <label value="class"/>
-      <hbox anyid="true" container="true" empty="true">
-        <label value="name"/>
-      </hbox>
-    </hbox>
-    <hbox anyid="true" container="true" empty="false">
-      <label value="class"/>
-      <hbox anyid="true" container="true" empty="true">
-        <label value="name"/>
-      </hbox>
-      <hbox anyid="true" container="true" empty="true">
-        <label value="location"/>
-      </hbox>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with assignment and condition";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="animals.xml" querytype="xml" ref=".">
-<template>
-<query>
-<assign var="?name" expr="name()"/>
-</query>
-<rule>
-<where subject="?name" rel="equals" negate="true" value="species"/>
-<action>
-<hbox uri="?">
-<label value="?name"/>
-</hbox>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithassignmentandconditiondontrecurse.xul
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with assignment and condition dont-recurse
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <hbox anyid="true" container="true" empty="false">
-      <label value="class"/>
-    </hbox>
-    <hbox anyid="true" container="true" empty="false">
-      <label value="class"/>
-    </hbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with assignment and condition dont-recurse";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="animals.xml" querytype="xml" ref="." flags="dont-recurse">
-<template>
-<query>
-<assign var="?name" expr="name()"/>
-</query>
-<rule>
-<where subject="?name" rel="equals" negate="true" value="species"/>
-<action>
-<hbox uri="?">
-<label value="?name"/>
-</hbox>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithbindinginbindings.xul
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with binding in bindings
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <checkbox anyid="true" container="true" empty="true" label="Reptiles"/>
-    <checkbox anyid="true" container="true" empty="true" label="Birds"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with binding in bindings";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="animals.xml" querytype="xml" ref=".">
-<template>
-<query expr="class/name"/>
-<rule id="rule">
-<bindings>
-<binding subject="?" predicate="text()" object="?nm"/>
-</bindings>
-<action>
-<checkbox uri="?" label="?nm"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithbindinginrule.xul
+++ /dev/null
@@ -1,64 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with binding in rule
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <label anyid="true" container="true" empty="true" value="Class Reptiles"/>
-    <label anyid="true" container="true" empty="true" value="Class Birds"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with binding in rule";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-Components.classes["@mozilla.org/consoleservice;1"].
-           getService(Components.interfaces.nsIConsoleService).reset();
-
-expectLoggedMessages = function()
-{
-  // check log to ensure that two rows have been added
-  var initialNumber = Number(document.getElementById("root").firstChild.nextSibling.id.substring(3));
-  expectConsoleMessage('', 'row' + initialNumber, true, true, '1 matching rule 1');
-  expectConsoleMessage('', 'row' + (initialNumber + 1), true, true, '1 matching rule 1');
-}
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root"
-      flags="logging" datasources="animals.xml" querytype="xml" ref=".">
-<template>
-<query expr="class/name"/>
-<rule id="rule">
-<binding subject="?" predicate="concat('Class ', text())" object="?text"/>
-<action>
-<label uri="?" value="?text"/>
-</action>
-</rule>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithdifferentmember.xul
+++ /dev/null
@@ -1,48 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with different member
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Chamaeleo-chamaelon" label="Chameleon 2"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Dromaius-novaehollandiae" label="Emu 12"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Tyto-alba" label="Barn Owl 4"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Corvus-corax" label="Raven 0"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with different member";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="animals.xml" querytype="xml" ref=".">
-<template expr="class/species">
-<button uri="?memb" label="?name ?specimens"/>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithinlinedata.xul
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with inline data
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button anyid="true" label="Nathan"/>
-    <button anyid="true" label="Marie"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with inline data";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<people id="data" xmlns:test="http://www.mozilla.com/test">
-<test:person name="Nathan"/>
-<person name="Luke"/>
-<xt:person xmlns:xt="http://www.mozilla.com/test" name="Marie"/>
-</people>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="#data" querytype="xml" ref=".">
-<template expr="test:person">
-<button uri="?" label="?name"/>
-</template>
-<button id="row6" label="Nathan"/>
-<button id="row7" label="Marie"/>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithinlinedatawithmultiplequeries.xul
+++ /dev/null
@@ -1,71 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with inline data with multiple queries
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button anyid="true" label="Nathan"/>
-    <button anyid="true" label="Marie"/>
-    <checkbox anyid="true" label="Nathan"/>
-    <checkbox anyid="true" label="Luke"/>
-    <checkbox anyid="true" label="Marie"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with inline data with multiple queries";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<people id="data" xmlns:test="http://www.mozilla.com/test">
-<test:person name="Nathan"/>
-<person name="Luke"/>
-<xt:person xmlns:xt="http://www.mozilla.com/test" name="Marie"/>
-</people>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="#data" querytype="xml" ref=".">
-<template>
-<queryset>
-<query expr="test:person"/>
-<action>
-<button uri="?" label="?name"/>
-</action>
-</queryset>
-<queryset>
-<query/>
-<action>
-<checkbox uri="?" label="?name"/>
-</action>
-</queryset>
-</template>
-<button id="row9" label="Nathan"/>
-<button id="row10" label="Marie"/>
-<checkbox id="row11" label="Nathan"/>
-<checkbox id="row12" label="Luke"/>
-<checkbox id="row13" label="Marie"/>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithmultiplequeries.xul
+++ /dev/null
@@ -1,70 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with multiple queries
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Dromaius-novaehollandiae" label="(Dromaius-novaehollandiae) is a large bird"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Tyto-alba" label="(Tyto-alba) Barn Owl"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Corvus-corax" label="(Corvus-corax) Raven"/>
-    <label id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Chamaeleo-chamaelon" value="Chameleon"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with multiple queries";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="animals.xml" querytype="xml" ref=".">
-<template>
-<queryset>
-<query expr="class[position()&gt;1]/species">
-<assign var="?id" expr="concat('(', @id, ')')"/>
-</query>
-<rule>
-<where subject="?id" rel="equals" value="(Dromaius-novaehollandiae)"/>
-<action>
-<button uri="?" label="?id is a large bird"/>
-</action>
-</rule>
-<rule>
-<binding subject="?" predicate="@name" object="?name"/>
-<action>
-<button uri="?" label="?id ?name"/>
-</action>
-</rule>
-</queryset>
-<queryset>
-<query expr="class[name/text()='Reptiles']/species"/>
-<action>
-<label uri="?" value="?name"/>
-</action>
-</queryset>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithothertypes.xul
+++ /dev/null
@@ -1,75 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with other types
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <groupbox anyid="true" container="true" empty="false">
-      <caption label="Reptiles false"/>
-      <label id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Chamaeleo-chamaelon" value="Chameleon"/>
-    </groupbox>
-    <groupbox anyid="true" container="true" empty="false">
-      <caption label="Birds true"/>
-      <label id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Dromaius-novaehollandiae" value="Emu"/>
-      <label id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Tyto-alba" value="Barn Owl"/>
-      <label id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Corvus-corax" value="Raven"/>
-    </groupbox>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with other types";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="animals.xml" querytype="xml" ref=".">
-<template>
-<queryset>
-<query expr="species">
-<assign var="?haschild" expr="boolean(location)"/>
-<assign var="?name" expr="@name"/>
-</query>
-<action>
-<label uri="?" value="?name"/>
-</action>
-</queryset>
-<queryset>
-<query>
-<assign var="?name" expr="name/text()"/>
-<assign var="?isbirds" expr="name/text() = 'Birds'"/>
-</query>
-<rule parent="vbox">
-<action>
-<groupbox uri="?">
-<caption label="?name ?isbirds"/>
-</groupbox>
-</action>
-</rule>
-</queryset>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithsort.xul
+++ /dev/null
@@ -1,51 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with sort
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Tyto-alba" label="Barn Owl"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Chamaeleo-chamaelon" label="Chameleon"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Dromaius-novaehollandiae" label="Emu"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Corvus-corax" label="Raven"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with sort";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="animals.xml" querytype="xml" ref="." sort="?name" sortDirection="ascending">
-<template>
-<query expr="class/species"/>
-<action>
-<button uri="?" label="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
deleted file mode 100644
--- a/dom/xul/templates/tests/chrome/test_tmpl_xmlquerywithsortotherfield.xul
+++ /dev/null
@@ -1,51 +0,0 @@
-<?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"?>
-
-<!--
-  xml query with sort other field
--->
-
-<window title="XUL Template Tests" width="500" height="600"
-        onload="test_template();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <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;"/>
-
-  <data id="output">
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Tyto-alba" label="Barn Owl"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Dromaius-novaehollandiae" label="Emu"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Corvus-corax" label="Raven"/>
-    <button id="chrome://mochitests/content/chrome/dom/xul/templates/tests/chrome/animals.xml#Chamaeleo-chamaelon" label="Chameleon"/>
-  </data>
-
-<script src="templates_shared.js"/>
-
-<script>
-<![CDATA[
-SimpleTest.waitForExplicitFinish();
-
-var testid ="xml query with sort other field";
-var queryType = "xml";
-var isTreeBuilder = false;
-var needsOpen = false;
-var notWorkingYet = false;
-var notWorkingYetDynamic = false;
-var expectedOutput = document.getElementById("output");
-
-var changes = [];
-]]>
-</script>
-
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="root" datasources="animals.xml" querytype="xml" ref="." sort="?id" sortDirection="descending">
-<template>
-<query expr="class/species"/>
-<action>
-<button uri="?" label="?name"/>
-</action>
-</template>
-</vbox>
-
-</window>
--- a/layout/build/moz.build
+++ b/layout/build/moz.build
@@ -43,17 +43,16 @@ LOCAL_INCLUDES += [
     '/dom/storage',
     '/dom/svg',
     '/dom/xbl',
     '/dom/xslt/base',
     '/dom/xslt/xml',
     '/dom/xslt/xpath',
     '/dom/xslt/xslt',
     '/dom/xul',
-    '/dom/xul/templates',
     '/editor/composer',
     '/editor/txmgr',
     '/editor/txtsvc',
     '/extensions/cookie',
     '/js/xpconnect/loader',
     '/js/xpconnect/src',
     '/netwerk/base',
     '/netwerk/cookie',
--- a/layout/xul/nsXULPopupManager.cpp
+++ b/layout/xul/nsXULPopupManager.cpp
@@ -13,17 +13,16 @@
 #include "nsContentUtils.h"
 #include "nsIDOMDocument.h"
 #include "nsIDOMEvent.h"
 #include "nsXULElement.h"
 #include "nsIDOMXULMenuListElement.h"
 #include "nsIXULDocument.h"
 #include "nsIDOMXULDocument.h"
 #include "nsIDOMXULCommandDispatcher.h"
-#include "nsIXULTemplateBuilder.h"
 #include "nsCSSFrameConstructor.h"
 #include "nsGlobalWindow.h"
 #include "nsLayoutUtils.h"
 #include "nsViewManager.h"
 #include "nsIComponentManager.h"
 #include "nsITimer.h"
 #include "nsFocusManager.h"
 #include "nsIDocShell.h"
@@ -697,33 +696,16 @@ nsXULPopupManager::SetActiveMenuBar(nsMe
   UpdateKeyboardListeners();
 }
 
 void
 nsXULPopupManager::ShowMenu(nsIContent *aMenu,
                             bool aSelectFirstItem,
                             bool aAsynchronous)
 {
-  // generate any template content first. Otherwise, the menupopup may not
-  // have been created yet.
-  if (aMenu) {
-    nsIContent* element = aMenu;
-    do {
-      RefPtr<nsXULElement> xulelem = nsXULElement::FromContent(element);
-      if (xulelem) {
-        nsCOMPtr<nsIXULTemplateBuilder> builder = xulelem->GetBuilder();
-        if (builder) {
-          builder->CreateContents(aMenu->AsElement(), true);
-          break;
-        }
-      }
-      element = element->GetParent();
-    } while (element);
-  }
-
   nsMenuFrame* menuFrame = do_QueryFrame(aMenu->GetPrimaryFrame());
   if (!menuFrame || !menuFrame->IsMenu())
     return;
 
   nsMenuPopupFrame* popupFrame =  menuFrame->GetPopup();
   if (!popupFrame || !MayShowPopup(popupFrame))
     return;
 
--- a/layout/xul/tree/TreeBoxObject.cpp
+++ b/layout/xul/tree/TreeBoxObject.cpp
@@ -3,17 +3,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "mozilla/dom/TreeBoxObject.h"
 #include "nsCOMPtr.h"
 #include "nsXULElement.h"
 #include "nsIScriptableRegion.h"
-#include "nsIXULTemplateBuilder.h"
 #include "nsTreeContentView.h"
 #include "nsITreeSelection.h"
 #include "ChildIterator.h"
 #include "nsContentUtils.h"
 #include "nsError.h"
 #include "nsTreeBodyFrame.h"
 #include "mozilla/dom/TreeBoxObjectBinding.h"
 #include "nsITreeColumns.h"
@@ -141,25 +140,19 @@ TreeBoxObject::GetView(nsITreeView * *aV
 
     if (mView)
       // Our new frame needs to initialise itself
       return mTreeBody->GetView(aView);
   }
   if (!mView) {
     RefPtr<nsXULElement> xulele = nsXULElement::FromContentOrNull(mContent);
     if (xulele) {
-      // See if there is a XUL tree builder associated with the element
-      nsCOMPtr<nsIXULTemplateBuilder> builder = xulele->GetBuilder();
-      mView = do_QueryInterface(builder);
-
-      if (!mView) {
-        // No tree builder, create a tree content view.
-        nsresult rv = NS_NewTreeContentView(getter_AddRefs(mView));
-        NS_ENSURE_SUCCESS(rv, rv);
-      }
+      // No tree builder, create a tree content view.
+      nsresult rv = NS_NewTreeContentView(getter_AddRefs(mView));
+      NS_ENSURE_SUCCESS(rv, rv);
 
       // Initialise the frame and view
       mTreeBody->SetView(mView);
     }
   }
   NS_IF_ADDREF(*aView = mView);
   return NS_OK;
 }
--- a/layout/xul/tree/nsTreeBodyFrame.cpp
+++ b/layout/xul/tree/nsTreeBodyFrame.cpp
@@ -38,17 +38,16 @@
 #include "nsIDOMMouseEvent.h"
 #include "nsIDOMElement.h"
 #include "nsIDOMNodeList.h"
 #include "nsIDOMDocument.h"
 #include "nsIDOMXULElement.h"
 #include "nsIDocument.h"
 #include "mozilla/css/StyleRule.h"
 #include "nsCSSRendering.h"
-#include "nsIXULTemplateBuilder.h"
 #include "nsString.h"
 #include "nsContainerFrame.h"
 #include "nsView.h"
 #include "nsViewManager.h"
 #include "nsVariant.h"
 #include "nsWidgetsCID.h"
 #include "nsBoxFrame.h"
 #include "nsIURL.h"
--- a/mobile/android/installer/package-manifest.in
+++ b/mobile/android/installer/package-manifest.in
@@ -255,17 +255,16 @@
 @BINPATH@/components/xpcom_components.xpt
 @BINPATH@/components/xpcom_ds.xpt
 @BINPATH@/components/xpcom_io.xpt
 @BINPATH@/components/xpcom_threads.xpt
 @BINPATH@/components/xpcom_xpti.xpt
 @BINPATH@/components/xpconnect.xpt
 @BINPATH@/components/xulapp.xpt
 @BINPATH@/components/xul.xpt
-@BINPATH@/components/xultmpl.xpt
 @BINPATH@/components/zipwriter.xpt
 
 ; JavaScript components
 @BINPATH@/components/ConsoleAPI.manifest
 @BINPATH@/components/ConsoleAPIStorage.js
 @BINPATH@/components/ContactManager.js
 @BINPATH@/components/ContactManager.manifest
 @BINPATH@/components/PhoneNumberService.js
--- a/testing/crashtest/crashtests.list
+++ b/testing/crashtest/crashtests.list
@@ -25,17 +25,16 @@ include ../../dom/offline/crashtests/cra
 include ../../dom/plugins/test/crashtests/crashtests.list
 include ../../dom/smil/crashtests/crashtests.list
 include ../../dom/svg/crashtests/crashtests.list
 include ../../dom/workers/test/crashtests/crashtests.list
 include ../../dom/xbl/crashtests/crashtests.list
 include ../../dom/xml/crashtests/crashtests.list
 include ../../dom/xslt/crashtests/crashtests.list
 include ../../dom/xul/crashtests/crashtests.list
-include ../../dom/xul/templates/crashtests/crashtests.list
 
 include ../../editor/composer/crashtests/crashtests.list
 include ../../editor/libeditor/crashtests/crashtests.list
 include ../../editor/txmgr/tests/crashtests/crashtests.list
 
 include ../../gfx/tests/crashtests/crashtests.list
 
 include ../../image/test/crashtests/crashtests.list