bug fix for 62796 - various range fixes, including a crasher in Range::deleteContents()

sr=kin@netscape.com
r=jst@netscape.com
This commit is contained in:
anthonyd%netscape.com 2001-01-07 04:52:23 +00:00
Родитель 0c57a195f2
Коммит 433f8f528a
2 изменённых файлов: 110 добавлений и 36 удалений

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

@ -956,7 +956,7 @@ nsresult nsRange::GetIsPositioned(PRBool* aIsPositioned)
nsresult nsRange::GetStartContainer(nsIDOMNode** aStartParent)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aStartParent)
return NS_ERROR_NULL_POINTER;
//NS_IF_RELEASE(*aStartParent); don't think we should be doing this
@ -968,7 +968,7 @@ nsresult nsRange::GetStartContainer(nsIDOMNode** aStartParent)
nsresult nsRange::GetStartOffset(PRInt32* aStartOffset)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aStartOffset)
return NS_ERROR_NULL_POINTER;
*aStartOffset = mStartOffset;
@ -978,7 +978,7 @@ nsresult nsRange::GetStartOffset(PRInt32* aStartOffset)
nsresult nsRange::GetEndContainer(nsIDOMNode** aEndParent)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aEndParent)
return NS_ERROR_NULL_POINTER;
//NS_IF_RELEASE(*aEndParent); don't think we should be doing this
@ -990,7 +990,7 @@ nsresult nsRange::GetEndContainer(nsIDOMNode** aEndParent)
nsresult nsRange::GetEndOffset(PRInt32* aEndOffset)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aEndOffset)
return NS_ERROR_NULL_POINTER;
*aEndOffset = mEndOffset;
@ -1000,7 +1000,7 @@ nsresult nsRange::GetEndOffset(PRInt32* aEndOffset)
nsresult nsRange::GetCollapsed(PRBool* aIsCollapsed)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (mEndParent == 0 ||
(mStartParent == mEndParent && mStartOffset == mEndOffset))
*aIsCollapsed = PR_TRUE;
@ -1011,6 +1011,8 @@ nsresult nsRange::GetCollapsed(PRBool* aIsCollapsed)
nsresult nsRange::GetCommonAncestorContainer(nsIDOMNode** aCommonParent)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
*aCommonParent = CommonParent(mStartParent,mEndParent);
NS_IF_ADDREF(*aCommonParent);
return NS_OK;
@ -1019,6 +1021,8 @@ nsresult nsRange::GetCommonAncestorContainer(nsIDOMNode** aCommonParent)
nsresult nsRange::SetStart(nsIDOMNode* aParent, PRInt32 aOffset)
{
nsresult res;
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aParent) return NS_ERROR_NULL_POINTER;
@ -1043,10 +1047,12 @@ nsresult nsRange::SetStart(nsIDOMNode* aParent, PRInt32 aOffset)
nsresult nsRange::SetStartBefore(nsIDOMNode* aSibling)
{
if (nsnull == aSibling) {
// Not the correct one to throw, but spec doesn't say what is
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (nsnull == aSibling)// Not the correct one to throw, but spec doesn't say what is
return NS_ERROR_DOM_NOT_OBJECT_ERR;
}
nsCOMPtr<nsIDOMNode> nParent;
nsresult res = aSibling->GetParentNode(getter_AddRefs(nParent));
if (NS_FAILED(res) || !nParent) return NS_ERROR_DOM_RANGE_INVALID_NODE_TYPE_ERR;
@ -1056,10 +1062,12 @@ nsresult nsRange::SetStartBefore(nsIDOMNode* aSibling)
nsresult nsRange::SetStartAfter(nsIDOMNode* aSibling)
{
if (nsnull == aSibling) {
// Not the correct one to throw, but spec doesn't say what is
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (nsnull == aSibling)// Not the correct one to throw, but spec doesn't say what is
return NS_ERROR_DOM_NOT_OBJECT_ERR;
}
nsCOMPtr<nsIDOMNode> nParent;
nsresult res = aSibling->GetParentNode(getter_AddRefs(nParent));
if (NS_FAILED(res) || !nParent) return NS_ERROR_DOM_RANGE_INVALID_NODE_TYPE_ERR;
@ -1070,6 +1078,8 @@ nsresult nsRange::SetStartAfter(nsIDOMNode* aSibling)
nsresult nsRange::SetEnd(nsIDOMNode* aParent, PRInt32 aOffset)
{
nsresult res;
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aParent) return NS_ERROR_NULL_POINTER;
@ -1094,10 +1104,12 @@ nsresult nsRange::SetEnd(nsIDOMNode* aParent, PRInt32 aOffset)
nsresult nsRange::SetEndBefore(nsIDOMNode* aSibling)
{
if (nsnull == aSibling) {
// Not the correct one to throw, but spec doesn't say what is
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (nsnull == aSibling)// Not the correct one to throw, but spec doesn't say what is
return NS_ERROR_DOM_NOT_OBJECT_ERR;
}
nsCOMPtr<nsIDOMNode> nParent;
nsresult res = aSibling->GetParentNode(getter_AddRefs(nParent));
if (NS_FAILED(res) || !nParent) return NS_ERROR_DOM_RANGE_INVALID_NODE_TYPE_ERR;
@ -1107,10 +1119,12 @@ nsresult nsRange::SetEndBefore(nsIDOMNode* aSibling)
nsresult nsRange::SetEndAfter(nsIDOMNode* aSibling)
{
if (nsnull == aSibling) {
// Not the correct one to throw, but spec doesn't say what is
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (nsnull == aSibling)// Not the correct one to throw, but spec doesn't say what is
return NS_ERROR_DOM_NOT_OBJECT_ERR;
}
nsCOMPtr<nsIDOMNode> nParent;
nsresult res = aSibling->GetParentNode(getter_AddRefs(nParent));
if (NS_FAILED(res) || !nParent) return NS_ERROR_DOM_RANGE_INVALID_NODE_TYPE_ERR;
@ -1121,7 +1135,7 @@ nsresult nsRange::SetEndAfter(nsIDOMNode* aSibling)
nsresult nsRange::Collapse(PRBool aToStart)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (aToStart)
{
@ -1141,6 +1155,9 @@ nsresult nsRange::Unposition()
nsresult nsRange::SelectNode(nsIDOMNode* aN)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aN) return NS_ERROR_NULL_POINTER;
nsCOMPtr<nsIDOMNode> parent;
nsCOMPtr<nsIDOMNode> theNode( do_QueryInterface(aN) );
@ -1165,6 +1182,9 @@ nsresult nsRange::SelectNode(nsIDOMNode* aN)
nsresult nsRange::SelectNodeContents(nsIDOMNode* aN)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
nsCOMPtr<nsIDOMNode> theNode( do_QueryInterface(aN) );
nsCOMPtr<nsIDOMNodeList> aChildNodes;
@ -1186,6 +1206,9 @@ nsresult nsRange::DeleteContents()
nsCOMPtr<nsIContent> cEnd;
// get the content versions of our endpoints
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
nsresult res = mStartParent->QueryInterface(NS_GET_IID(nsIContent), getter_AddRefs(cStart));
if (NS_FAILED(res))
{
@ -1333,6 +1356,9 @@ nsresult nsRange::DeleteContents()
nsresult nsRange::CompareBoundaryPoints(PRUint16 how, nsIDOMRange* srcRange,
PRInt32* aCmpRet)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
nsresult res;
if (aCmpRet == 0)
return NS_ERROR_NULL_POINTER;
@ -1393,6 +1419,9 @@ nsresult nsRange::CompareBoundaryPoints(PRUint16 how, nsIDOMRange* srcRange,
nsresult nsRange::ExtractContents(nsIDOMDocumentFragment** aReturn)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
nsresult res = CloneContents(aReturn);
if (NS_FAILED(res))
return res;
@ -1557,6 +1586,9 @@ return NS_ERROR_NOT_IMPLEMENTED;
nsresult nsRange::CloneRange(nsIDOMRange** aReturn)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (aReturn == 0)
return NS_ERROR_NULL_POINTER;
@ -1580,6 +1612,9 @@ nsresult nsRange::SurroundContents(nsIDOMNode* aN)
nsresult nsRange::ToString(nsAWritableString& aReturn)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
nsCOMPtr<nsIContent> cStart( do_QueryInterface(mStartParent) );
nsCOMPtr<nsIContent> cEnd( do_QueryInterface(mEndParent) );
@ -1677,6 +1712,8 @@ nsresult nsRange::ToString(nsAWritableString& aReturn)
nsresult
nsRange::Detach()
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
return DoSetRange(nsnull,0,nsnull,0);
}

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

@ -956,7 +956,7 @@ nsresult nsRange::GetIsPositioned(PRBool* aIsPositioned)
nsresult nsRange::GetStartContainer(nsIDOMNode** aStartParent)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aStartParent)
return NS_ERROR_NULL_POINTER;
//NS_IF_RELEASE(*aStartParent); don't think we should be doing this
@ -968,7 +968,7 @@ nsresult nsRange::GetStartContainer(nsIDOMNode** aStartParent)
nsresult nsRange::GetStartOffset(PRInt32* aStartOffset)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aStartOffset)
return NS_ERROR_NULL_POINTER;
*aStartOffset = mStartOffset;
@ -978,7 +978,7 @@ nsresult nsRange::GetStartOffset(PRInt32* aStartOffset)
nsresult nsRange::GetEndContainer(nsIDOMNode** aEndParent)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aEndParent)
return NS_ERROR_NULL_POINTER;
//NS_IF_RELEASE(*aEndParent); don't think we should be doing this
@ -990,7 +990,7 @@ nsresult nsRange::GetEndContainer(nsIDOMNode** aEndParent)
nsresult nsRange::GetEndOffset(PRInt32* aEndOffset)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aEndOffset)
return NS_ERROR_NULL_POINTER;
*aEndOffset = mEndOffset;
@ -1000,7 +1000,7 @@ nsresult nsRange::GetEndOffset(PRInt32* aEndOffset)
nsresult nsRange::GetCollapsed(PRBool* aIsCollapsed)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (mEndParent == 0 ||
(mStartParent == mEndParent && mStartOffset == mEndOffset))
*aIsCollapsed = PR_TRUE;
@ -1011,6 +1011,8 @@ nsresult nsRange::GetCollapsed(PRBool* aIsCollapsed)
nsresult nsRange::GetCommonAncestorContainer(nsIDOMNode** aCommonParent)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
*aCommonParent = CommonParent(mStartParent,mEndParent);
NS_IF_ADDREF(*aCommonParent);
return NS_OK;
@ -1019,6 +1021,8 @@ nsresult nsRange::GetCommonAncestorContainer(nsIDOMNode** aCommonParent)
nsresult nsRange::SetStart(nsIDOMNode* aParent, PRInt32 aOffset)
{
nsresult res;
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aParent) return NS_ERROR_NULL_POINTER;
@ -1043,10 +1047,12 @@ nsresult nsRange::SetStart(nsIDOMNode* aParent, PRInt32 aOffset)
nsresult nsRange::SetStartBefore(nsIDOMNode* aSibling)
{
if (nsnull == aSibling) {
// Not the correct one to throw, but spec doesn't say what is
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (nsnull == aSibling)// Not the correct one to throw, but spec doesn't say what is
return NS_ERROR_DOM_NOT_OBJECT_ERR;
}
nsCOMPtr<nsIDOMNode> nParent;
nsresult res = aSibling->GetParentNode(getter_AddRefs(nParent));
if (NS_FAILED(res) || !nParent) return NS_ERROR_DOM_RANGE_INVALID_NODE_TYPE_ERR;
@ -1056,10 +1062,12 @@ nsresult nsRange::SetStartBefore(nsIDOMNode* aSibling)
nsresult nsRange::SetStartAfter(nsIDOMNode* aSibling)
{
if (nsnull == aSibling) {
// Not the correct one to throw, but spec doesn't say what is
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (nsnull == aSibling)// Not the correct one to throw, but spec doesn't say what is
return NS_ERROR_DOM_NOT_OBJECT_ERR;
}
nsCOMPtr<nsIDOMNode> nParent;
nsresult res = aSibling->GetParentNode(getter_AddRefs(nParent));
if (NS_FAILED(res) || !nParent) return NS_ERROR_DOM_RANGE_INVALID_NODE_TYPE_ERR;
@ -1070,6 +1078,8 @@ nsresult nsRange::SetStartAfter(nsIDOMNode* aSibling)
nsresult nsRange::SetEnd(nsIDOMNode* aParent, PRInt32 aOffset)
{
nsresult res;
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aParent) return NS_ERROR_NULL_POINTER;
@ -1094,10 +1104,12 @@ nsresult nsRange::SetEnd(nsIDOMNode* aParent, PRInt32 aOffset)
nsresult nsRange::SetEndBefore(nsIDOMNode* aSibling)
{
if (nsnull == aSibling) {
// Not the correct one to throw, but spec doesn't say what is
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (nsnull == aSibling)// Not the correct one to throw, but spec doesn't say what is
return NS_ERROR_DOM_NOT_OBJECT_ERR;
}
nsCOMPtr<nsIDOMNode> nParent;
nsresult res = aSibling->GetParentNode(getter_AddRefs(nParent));
if (NS_FAILED(res) || !nParent) return NS_ERROR_DOM_RANGE_INVALID_NODE_TYPE_ERR;
@ -1107,10 +1119,12 @@ nsresult nsRange::SetEndBefore(nsIDOMNode* aSibling)
nsresult nsRange::SetEndAfter(nsIDOMNode* aSibling)
{
if (nsnull == aSibling) {
// Not the correct one to throw, but spec doesn't say what is
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (nsnull == aSibling)// Not the correct one to throw, but spec doesn't say what is
return NS_ERROR_DOM_NOT_OBJECT_ERR;
}
nsCOMPtr<nsIDOMNode> nParent;
nsresult res = aSibling->GetParentNode(getter_AddRefs(nParent));
if (NS_FAILED(res) || !nParent) return NS_ERROR_DOM_RANGE_INVALID_NODE_TYPE_ERR;
@ -1121,7 +1135,7 @@ nsresult nsRange::SetEndAfter(nsIDOMNode* aSibling)
nsresult nsRange::Collapse(PRBool aToStart)
{
if (!mIsPositioned)
return NS_ERROR_NOT_INITIALIZED;
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (aToStart)
{
@ -1141,6 +1155,9 @@ nsresult nsRange::Unposition()
nsresult nsRange::SelectNode(nsIDOMNode* aN)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (!aN) return NS_ERROR_NULL_POINTER;
nsCOMPtr<nsIDOMNode> parent;
nsCOMPtr<nsIDOMNode> theNode( do_QueryInterface(aN) );
@ -1165,6 +1182,9 @@ nsresult nsRange::SelectNode(nsIDOMNode* aN)
nsresult nsRange::SelectNodeContents(nsIDOMNode* aN)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
nsCOMPtr<nsIDOMNode> theNode( do_QueryInterface(aN) );
nsCOMPtr<nsIDOMNodeList> aChildNodes;
@ -1186,6 +1206,9 @@ nsresult nsRange::DeleteContents()
nsCOMPtr<nsIContent> cEnd;
// get the content versions of our endpoints
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
nsresult res = mStartParent->QueryInterface(NS_GET_IID(nsIContent), getter_AddRefs(cStart));
if (NS_FAILED(res))
{
@ -1333,6 +1356,9 @@ nsresult nsRange::DeleteContents()
nsresult nsRange::CompareBoundaryPoints(PRUint16 how, nsIDOMRange* srcRange,
PRInt32* aCmpRet)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
nsresult res;
if (aCmpRet == 0)
return NS_ERROR_NULL_POINTER;
@ -1393,6 +1419,9 @@ nsresult nsRange::CompareBoundaryPoints(PRUint16 how, nsIDOMRange* srcRange,
nsresult nsRange::ExtractContents(nsIDOMDocumentFragment** aReturn)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
nsresult res = CloneContents(aReturn);
if (NS_FAILED(res))
return res;
@ -1557,6 +1586,9 @@ return NS_ERROR_NOT_IMPLEMENTED;
nsresult nsRange::CloneRange(nsIDOMRange** aReturn)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
if (aReturn == 0)
return NS_ERROR_NULL_POINTER;
@ -1580,6 +1612,9 @@ nsresult nsRange::SurroundContents(nsIDOMNode* aN)
nsresult nsRange::ToString(nsAWritableString& aReturn)
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
nsCOMPtr<nsIContent> cStart( do_QueryInterface(mStartParent) );
nsCOMPtr<nsIContent> cEnd( do_QueryInterface(mEndParent) );
@ -1677,6 +1712,8 @@ nsresult nsRange::ToString(nsAWritableString& aReturn)
nsresult
nsRange::Detach()
{
if (!mIsPositioned)
return NS_ERROR_DOM_INVALID_STATE_ERR;// range is detached
return DoSetRange(nsnull,0,nsnull,0);
}