Bug 386009. Fix a leak in nsEditor and delete some code we don't need anymore. r+sr=dbaron

This commit is contained in:
sayrer@gmail.com 2007-06-27 18:37:03 -07:00
parent ae67ee9a96
commit 228c4f8dc5
3 changed files with 10 additions and 50 deletions

View File

@ -94,38 +94,18 @@ NS_IMETHODIMP CreateElementTxn::DoTransaction(void)
NS_ASSERTION(mEditor && mParent, "bad state");
if (!mEditor || !mParent) return NS_ERROR_NOT_INITIALIZED;
// create a new node
nsAutoString textNodeTag;
nsresult result = nsEditor::GetTextNodeTag(textNodeTag);
if (NS_FAILED(result)) { return result; }
if (textNodeTag == mTag)
{
nsCOMPtr<nsIDOMDocument>doc;
result = mEditor->GetDocument(getter_AddRefs(doc));
if (NS_FAILED(result)) return result;
if (!doc) return NS_ERROR_NULL_POINTER;
const nsString stringData;
nsCOMPtr<nsIDOMText>newTextNode;
result = doc->CreateTextNode(stringData, getter_AddRefs(newTextNode));
if (NS_FAILED(result)) return result;
if (!newTextNode) return NS_ERROR_NULL_POINTER;
mNewNode = do_QueryInterface(newTextNode);
}
else
{
nsCOMPtr<nsIContent> newContent;
nsCOMPtr<nsIContent> newContent;
//new call to use instead to get proper HTML element, bug# 39919
nsresult result = mEditor->CreateHTMLContent(mTag, getter_AddRefs(newContent));
if (NS_FAILED(result)) return result;
nsCOMPtr<nsIDOMElement>newElement = do_QueryInterface(newContent);
if (!newElement) return NS_ERROR_NULL_POINTER;
mNewNode = do_QueryInterface(newElement);
// Try to insert formatting whitespace for the new node:
mEditor->MarkNodeDirty(mNewNode);
//new call to use instead to get proper HTML element, bug# 39919
result = mEditor->CreateHTMLContent(mTag, getter_AddRefs(newContent));
if (NS_FAILED(result)) return result;
nsCOMPtr<nsIDOMElement>newElement = do_QueryInterface(newContent);
if (!newElement) return NS_ERROR_NULL_POINTER;
mNewNode = do_QueryInterface(newElement);
// Try to insert formatting whitespace for the new node:
mEditor->MarkNodeDirty(mNewNode);
}
NS_ASSERTION(((NS_SUCCEEDED(result)) && (mNewNode)), "could not create element.");
if (!mNewNode) return NS_ERROR_NULL_POINTER;

View File

@ -2523,22 +2523,6 @@ NS_IMETHODIMP nsEditor::ScrollSelectionIntoView(PRBool aScrollToAnchor)
return NS_OK;
}
/** static helper method */
nsresult nsEditor::GetTextNodeTag(nsAString& aOutString)
{
aOutString.Truncate();
static nsString *gTextNodeTag=nsnull;
if (!gTextNodeTag)
{
if ( (gTextNodeTag = new nsString) == 0 )
return NS_ERROR_OUT_OF_MEMORY;
gTextNodeTag->AssignLiteral("special text node tag");
}
aOutString = *gTextNodeTag;
return NS_OK;
}
NS_IMETHODIMP nsEditor::InsertTextImpl(const nsAString& aStringToInsert,
nsCOMPtr<nsIDOMNode> *aInOutNode,
PRInt32 *aInOutOffset,

View File

@ -368,10 +368,6 @@ public:
nsresult RestorePreservedSelection(nsISelection *aSel);
void StopPreservingSelection();
/** return the string that represents text nodes in the content tree */
static nsresult GetTextNodeTag(nsAString& aOutString);
/**
* SplitNode() creates a new node identical to an existing node, and split the contents between the two nodes
* @param aExistingRightNode the node to split. It will become the new node's next sibling.