Bug 1145395 - Return a DocumentFragment from nsHTMLEditor::ParseFragment; r=ehsan

This commit is contained in:
Ms2ger 2015-05-13 17:58:25 +02:00
parent 797627c711
commit a21fcabaac
2 changed files with 10 additions and 7 deletions

View File

@ -2013,9 +2013,9 @@ nsresult nsHTMLEditor::CreateDOMFragmentFromPaste(const nsAString &aInputString,
// if we have context info, create a fragment for that
nsresult rv = NS_OK;
nsCOMPtr<nsIDOMNode> contextLeaf;
nsCOMPtr<nsIDOMNode> contextAsNode;
nsRefPtr<DocumentFragment> contextAsNode;
if (!aContextStr.IsEmpty()) {
rv = ParseFragment(aContextStr, nullptr, doc, address_of(contextAsNode),
rv = ParseFragment(aContextStr, nullptr, doc, getter_AddRefs(contextAsNode),
aTrustedInput);
NS_ENSURE_SUCCESS(rv, rv);
NS_ENSURE_TRUE(contextAsNode, NS_ERROR_FAILURE);
@ -2044,11 +2044,13 @@ nsresult nsHTMLEditor::CreateDOMFragmentFromPaste(const nsAString &aInputString,
} else {
contextAtom = nsGkAtoms::body;
}
nsRefPtr<DocumentFragment> fragment;
rv = ParseFragment(aInputString,
contextAtom,
doc,
outFragNode,
getter_AddRefs(fragment),
aTrustedInput);
*outFragNode = fragment;
NS_ENSURE_SUCCESS(rv, rv);
NS_ENSURE_TRUE(*outFragNode, NS_ERROR_FAILURE);
@ -2107,7 +2109,7 @@ nsresult nsHTMLEditor::CreateDOMFragmentFromPaste(const nsAString &aInputString,
nsresult nsHTMLEditor::ParseFragment(const nsAString & aFragStr,
nsIAtom* aContextLocalName,
nsIDocument* aTargetDocument,
nsCOMPtr<nsIDOMNode> *outNode,
DocumentFragment** aFragment,
bool aTrustedInput)
{
nsAutoScriptBlockerSuppressNodeRemoved autoBlocker;
@ -2127,7 +2129,7 @@ nsresult nsHTMLEditor::ParseFragment(const nsAString & aFragStr,
nsIParserUtils::SanitizerAllowComments);
sanitizer.Sanitize(fragment);
}
*outNode = fragment.forget();
fragment.forget(aFragment);
return rv;
}

View File

@ -54,8 +54,9 @@ struct PropItem;
namespace mozilla {
namespace dom {
class DocumentFragment;
template<class T> class OwningNonNull;
}
} // namespace dom
namespace widget {
struct IMEState;
} // namespace widget
@ -592,7 +593,7 @@ protected:
bool aTrustedInput);
nsresult ParseFragment(const nsAString & aStr, nsIAtom* aContextLocalName,
nsIDocument* aTargetDoc,
nsCOMPtr<nsIDOMNode> *outNode,
mozilla::dom::DocumentFragment** aFragment,
bool aTrustedInput);
void CreateListOfNodesToPaste(mozilla::dom::DocumentFragment& aFragment,
nsTArray<mozilla::dom::OwningNonNull<nsINode>>& outNodeList,