From e773c8420e5e91e01e64af2af8ff623c8962d90d Mon Sep 17 00:00:00 2001 From: "allan%beaufour.dk" Date: Tue, 23 May 2006 15:22:09 +0000 Subject: [PATCH] [XForms] External instance not restored (on xforms-reset) after replace=instance. Bug 338933, r=doronr+smaug git-svn-id: svn://10.0.0.236/trunk@198263 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xforms/nsXFormsInstanceElement.cpp | 49 +++++++------------ 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/mozilla/extensions/xforms/nsXFormsInstanceElement.cpp b/mozilla/extensions/xforms/nsXFormsInstanceElement.cpp index 3a51371b276..f0b0b3e2d15 100644 --- a/mozilla/extensions/xforms/nsXFormsInstanceElement.cpp +++ b/mozilla/extensions/xforms/nsXFormsInstanceElement.cpp @@ -351,41 +351,26 @@ nsXFormsInstanceElement::BackupOriginalDocument() NS_IMETHODIMP nsXFormsInstanceElement::RestoreOriginalDocument() { - nsresult rv = NS_OK; - // This is called when xforms-reset is received by the model. We assume // that the backup of the instance document has been populated and is - // loaded into mOriginalDocument. Get the backup's root node, clone it, and - // insert it into the live copy of the instance document. This is the magic - // behind getting xforms-reset to work. - if(mDocument && mOriginalDocument) { - nsCOMPtr newNode, instanceRootNode, nodeReturn; - nsCOMPtr instanceRoot; - - // first remove all the old stuff - rv = mDocument->GetDocumentElement(getter_AddRefs(instanceRoot)); - if(NS_SUCCEEDED(rv)) { - if(instanceRoot) { - rv = mDocument->RemoveChild(instanceRoot, getter_AddRefs(nodeReturn)); - NS_ENSURE_SUCCESS(rv, rv); - } - } - - // now all of the garbage is out o' there! Put the original data back - // into mDocument - rv = mOriginalDocument->GetDocumentElement(getter_AddRefs(instanceRoot)); - NS_ENSURE_SUCCESS(rv, rv); - NS_ENSURE_TRUE(instanceRoot, NS_ERROR_FAILURE); - instanceRootNode = do_QueryInterface(instanceRoot); - - rv = instanceRootNode->CloneNode(PR_TRUE, getter_AddRefs(newNode)); - if(NS_SUCCEEDED(rv)) { - rv = mDocument->AppendChild(newNode, getter_AddRefs(nodeReturn)); - NS_WARN_IF_FALSE(NS_SUCCEEDED(rv), - "failed to restore original instance document"); - } + // loaded into mOriginalDocument. + + if (!mOriginalDocument) { + return NS_ERROR_FAILURE; } - return rv; + + nsCOMPtr newDocNode; + nsresult rv = mOriginalDocument->CloneNode(PR_TRUE, + getter_AddRefs(newDocNode)); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr newDoc(do_QueryInterface(newDocNode)); + NS_ENSURE_STATE(newDoc); + + rv = SetInstanceDocument(newDoc); + NS_ENSURE_SUCCESS(rv, rv); + + return NS_OK; } NS_IMETHODIMP