Commit 228eb789 authored by aaronr%us.ibm.com's avatar aaronr%us.ibm.com
Browse files

[XForms] Submission is leaving off document level pi and comments. Bug 344621,...

[XForms] Submission is leaving off document level pi and comments. Bug 344621, patch by sspeiche, r=doronr+olli
parent fcc85009
Loading
Loading
Loading
Loading
+23 −10
Original line number Diff line number Diff line
@@ -1186,20 +1186,33 @@ nsXFormsSubmissionElement::CreatePurgedDoc(nsIDOMNode *source,
  }

  // recursively walk the source document, copying nodes as appropriate
  nsCOMPtr<nsIDOMNode> startNode;
  nsCOMPtr<nsIModelElementPrivate> model = GetModel();
  NS_ENSURE_STATE(model);
  nsresult rv = NS_OK;
  // if it is a document, get the root element
  if (sourceDoc) {
    nsCOMPtr<nsIDOMElement> elm;
    sourceDoc->GetDocumentElement(getter_AddRefs(elm));
    startNode = elm;
    // Iterate over document child nodes to preserve document level
    // processing instructions and comment nodes.
    nsCOMPtr<nsIDOMNode> curDocNode, node, destChild;
    sourceDoc->GetFirstChild(getter_AddRefs(curDocNode));
    PRUint16 type;
    while (curDocNode) {
      curDocNode->GetNodeType(&type);
      if (type == nsIDOMNode::ELEMENT_NODE) {
        rv = CopyChildren(model, curDocNode, doc, doc, cdataElements, 0);
        NS_ENSURE_SUCCESS(rv, rv);
      } else {
    startNode = source;
        doc->ImportNode(curDocNode, PR_FALSE, getter_AddRefs(destChild));
        doc->AppendChild(destChild, getter_AddRefs(node));
      }

  nsCOMPtr<nsIModelElementPrivate> model = GetModel();
  NS_ENSURE_STATE(model);
  nsresult rv = CopyChildren(model, startNode, doc, doc, cdataElements, 0);
      curDocNode->GetNextSibling(getter_AddRefs(node));
      curDocNode.swap(node);
    }
  } else {
    rv = CopyChildren(model, source, doc, doc, cdataElements, 0);
    NS_ENSURE_SUCCESS(rv, rv);
  }

  NS_ADDREF(*result = doc);
  return NS_OK;