Bug 750063 - Allow passing null to nsTextEditRules::CreateMozBR's outparam; r=ehsan

This commit is contained in:
Ms2ger 2012-05-05 11:00:05 +02:00
Родитель aa5069c6ef
Коммит e1087c279b
3 изменённых файлов: 29 добавлений и 32 удалений

Просмотреть файл

@ -4687,7 +4687,7 @@ nsHTMLEditRules::WillAlign(nsISelection *aSelection,
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
*aHandled = true; *aHandled = true;
// put in a moz-br so that it won't get deleted // put in a moz-br so that it won't get deleted
res = CreateMozBR(theDiv, 0, address_of(brNode)); res = CreateMozBR(theDiv, 0);
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
res = aSelection->Collapse(theDiv, 0); res = aSelection->Collapse(theDiv, 0);
selectionResetter.Abort(); // don't reset our selection in this case. selectionResetter.Abort(); // don't reset our selection in this case.
@ -6538,10 +6538,8 @@ nsHTMLEditRules::ReturnInHeader(nsISelection *aSelection,
bool bIsEmptyNode; bool bIsEmptyNode;
res = mHTMLEditor->IsEmptyNode(prevItem, &bIsEmptyNode); res = mHTMLEditor->IsEmptyNode(prevItem, &bIsEmptyNode);
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
if (bIsEmptyNode) if (bIsEmptyNode) {
{ res = CreateMozBR(prevItem, 0);
nsCOMPtr<nsIDOMNode> brNode;
res = CreateMozBR(prevItem, 0, address_of(brNode));
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
} }
} }
@ -6853,14 +6851,10 @@ nsHTMLEditRules::ReturnInListItem(nsISelection *aSelection,
bool bIsEmptyNode; bool bIsEmptyNode;
res = mHTMLEditor->IsEmptyNode(prevItem, &bIsEmptyNode); res = mHTMLEditor->IsEmptyNode(prevItem, &bIsEmptyNode);
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
if (bIsEmptyNode) if (bIsEmptyNode) {
{ res = CreateMozBR(prevItem, 0);
nsCOMPtr<nsIDOMNode> brNode;
res = CreateMozBR(prevItem, 0, address_of(brNode));
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
} } else {
else
{
res = mHTMLEditor->IsEmptyNode(aListItem, &bIsEmptyNode, true); res = mHTMLEditor->IsEmptyNode(aListItem, &bIsEmptyNode, true);
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
if (bIsEmptyNode) if (bIsEmptyNode)
@ -7551,11 +7545,11 @@ nsHTMLEditRules::AdjustSpecialBreaks(bool aSafeToAskFrames)
// and we want the br's to be after them. Also, we want the br // and we want the br's to be after them. Also, we want the br
// to be after the selection if the selection is in this node. // to be after the selection if the selection is in this node.
PRUint32 len; PRUint32 len;
nsCOMPtr<nsIDOMNode> brNode, theNode = arrayOfNodes[0]; nsCOMPtr<nsIDOMNode> theNode = arrayOfNodes[0];
arrayOfNodes.RemoveObjectAt(0); arrayOfNodes.RemoveObjectAt(0);
res = nsEditor::GetLengthOfDOMNode(theNode, len); res = nsEditor::GetLengthOfDOMNode(theNode, len);
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
res = CreateMozBR(theNode, (PRInt32)len, address_of(brNode)); res = CreateMozBR(theNode, (PRInt32)len);
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
} }
@ -7746,9 +7740,8 @@ nsHTMLEditRules::AdjustSelection(nsISelection *aSelection, nsIEditor::EDirection
return NS_OK; return NS_OK;
} }
nsCOMPtr<nsIDOMNode> brNode;
// we know we can skip the rest of this routine given the cirumstance // we know we can skip the rest of this routine given the cirumstance
return CreateMozBR(selNode, selOffset, address_of(brNode)); return CreateMozBR(selNode, selOffset);
} }
} }
@ -7782,7 +7775,7 @@ nsHTMLEditRules::AdjustSelection(nsISelection *aSelection, nsIEditor::EDirection
// the user will see no new line for the break. Also, things // the user will see no new line for the break. Also, things
// like table cells won't grow in height. // like table cells won't grow in height.
nsCOMPtr<nsIDOMNode> brNode; nsCOMPtr<nsIDOMNode> brNode;
res = CreateMozBR(selNode, selOffset, address_of(brNode)); res = CreateMozBR(selNode, selOffset, getter_AddRefs(brNode));
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
res = nsEditor::GetNodeLocation(brNode, address_of(selNode), &selOffset); res = nsEditor::GetNodeLocation(brNode, address_of(selNode), &selOffset);
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
@ -8444,14 +8437,13 @@ nsHTMLEditRules::InsertMozBRIfNeeded(nsIDOMNode *aNode)
if (!IsBlockNode(aNode)) return NS_OK; if (!IsBlockNode(aNode)) return NS_OK;
bool isEmpty; bool isEmpty;
nsCOMPtr<nsIDOMNode> brNode;
nsresult res = mHTMLEditor->IsEmptyNode(aNode, &isEmpty); nsresult res = mHTMLEditor->IsEmptyNode(aNode, &isEmpty);
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
if (isEmpty) if (!isEmpty) {
{ return NS_OK;
res = CreateMozBR(aNode, 0, address_of(brNode));
} }
return res;
return CreateMozBR(aNode, 0);
} }
NS_IMETHODIMP NS_IMETHODIMP

Просмотреть файл

@ -1103,8 +1103,7 @@ nsTextEditRules::CreateTrailingBRIfNeeded()
if (!lastChild->IsHTML(nsGkAtoms::br)) { if (!lastChild->IsHTML(nsGkAtoms::br)) {
nsAutoTxnsConserveSelection dontSpazMySelection(mEditor); nsAutoTxnsConserveSelection dontSpazMySelection(mEditor);
nsCOMPtr<nsIDOMNode> domBody = do_QueryInterface(body); nsCOMPtr<nsIDOMNode> domBody = do_QueryInterface(body);
nsCOMPtr<nsIDOMNode> unused; return CreateMozBR(domBody, body->Length());
return CreateMozBR(domBody, body->Length(), address_of(unused));
} }
// Check to see if the trailing BR is a former bogus node - this will have // Check to see if the trailing BR is a former bogus node - this will have
@ -1334,21 +1333,26 @@ nsTextEditRules::FillBufWithPWChars(nsAString *aOutString, PRInt32 aLength)
// CreateMozBR: put a BR node with moz attribute at {aNode, aOffset} // CreateMozBR: put a BR node with moz attribute at {aNode, aOffset}
// //
nsresult nsresult
nsTextEditRules::CreateMozBR(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outBRNode) nsTextEditRules::CreateMozBR(nsIDOMNode* inParent, PRInt32 inOffset,
nsIDOMNode** outBRNode)
{ {
NS_ENSURE_TRUE(inParent && outBRNode, NS_ERROR_NULL_POINTER); NS_ENSURE_TRUE(inParent, NS_ERROR_NULL_POINTER);
nsresult res = mEditor->CreateBR(inParent, inOffset, outBRNode); nsCOMPtr<nsIDOMNode> brNode;
nsresult res = mEditor->CreateBR(inParent, inOffset, address_of(brNode));
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
// give it special moz attr // give it special moz attr
nsCOMPtr<nsIDOMElement> brElem = do_QueryInterface(*outBRNode); nsCOMPtr<nsIDOMElement> brElem = do_QueryInterface(brNode);
if (brElem) if (brElem) {
{
res = mEditor->SetAttribute(brElem, NS_LITERAL_STRING("type"), NS_LITERAL_STRING("_moz")); res = mEditor->SetAttribute(brElem, NS_LITERAL_STRING("type"), NS_LITERAL_STRING("_moz"));
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
} }
return res;
if (outBRNode) {
brNode.forget(outBRNode);
}
return NS_OK;
} }
NS_IMETHODIMP NS_IMETHODIMP

Просмотреть файл

@ -226,7 +226,8 @@ protected:
/** Remove IME composition text from password buffer */ /** Remove IME composition text from password buffer */
nsresult RemoveIMETextFromPWBuf(PRUint32 &aStart, nsAString *aIMEString); nsresult RemoveIMETextFromPWBuf(PRUint32 &aStart, nsAString *aIMEString);
nsresult CreateMozBR(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outBRNode); nsresult CreateMozBR(nsIDOMNode* inParent, PRInt32 inOffset,
nsIDOMNode** outBRNode = nsnull);
nsresult CheckBidiLevelForDeletion(nsISelection *aSelection, nsresult CheckBidiLevelForDeletion(nsISelection *aSelection,
nsIDOMNode *aSelNode, nsIDOMNode *aSelNode,