if (! mDocument) return NS_OK;
if (mIsBuilding || mUpdateBatchNest != 0) return(NS_OK);
nsXULTemplateBuilder::OnAssert(nsIRDFResource* aSource,                               nsIRDFResource* aProperty,                               nsIRDFNode* aTarget){    // Just silently fail, because this can happen "normally" as part    // of tear-down code. (Bug 9098)    if (! mDocument)        return NS_OK;    // Ignore re-entrant updates while we're building content.    if (mIsBuilding)        return NS_OK;    nsresult rv;	if (mCache)        {            mCache->Assert(aSource, aProperty, aTarget, PR_TRUE /* XXX should be value passed in */);        }    LOG("onassert", aSource, aProperty, aTarget);    ClusterKeySet newkeys;    rv = Propogate(aSource, aProperty, aTarget, newkeys);    if (NS_FAILED(rv)) return rv;    rv = FireNewlyMatchedRules(newkeys);    if (NS_FAILED(rv)) return rv;    rv = SynchronizeAll(aSource, aProperty, nsnull, aTarget);    if (NS_FAILED(rv)) return rv;    return NS_OK;}