r=jst. Fixing refcounting of ID attribute atoms. Additional work to earlier checkin for fixing bug 10292. Also, added support for getElementByID() in XML documents.

This commit is contained in:
nisheeth%netscape.com 2000-09-01 02:21:06 +00:00
Родитель 8ac6fdd0bb
Коммит e5752be50d
8 изменённых файлов: 28 добавлений и 0 удалений

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

@ -196,6 +196,7 @@ nsNodeInfo::GetIDAttributeAtom(nsIAtom** aResult)
{ {
NS_ENSURE_ARG_POINTER(aResult); NS_ENSURE_ARG_POINTER(aResult);
*aResult = mInner.mIDAttributeAtom; *aResult = mInner.mIDAttributeAtom;
NS_IF_ADDREF(*aResult);
return NS_OK; return NS_OK;
} }

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

@ -899,6 +899,17 @@ MatchName(nsIContent *aContent, const nsAReadableString& aName)
return aContent; return aContent;
} }
} }
else {
nsCOMPtr<nsIXMLContent> xmlContent = do_QueryInterface(aContent);
nsCOMPtr<nsIAtom> IDValue;
if (xmlContent && NS_SUCCEEDED(xmlContent->GetID(*getter_AddRefs(IDValue))) && IDValue) {
const PRUnichar* IDValStr = nsnull;
IDValue->GetUnicode(&IDValStr);
if (aName.Equals(IDValStr)) {
return aContent;
}
}
}
PRInt32 i, count; PRInt32 i, count;
aContent->ChildCount(count); aContent->ChildCount(count);

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

@ -144,6 +144,7 @@ nsresult CStartToken::GetIDAttributeAtom(nsIAtom** aResult)
{ {
NS_ENSURE_ARG_POINTER(aResult); NS_ENSURE_ARG_POINTER(aResult);
*aResult = mIDAttributeAtom; *aResult = mIDAttributeAtom;
NS_IF_ADDREF(*aResult);
return NS_OK; return NS_OK;
} }

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

@ -400,6 +400,7 @@ nsCParserNode::GetIDAttributeAtom(nsIAtom** aResult) const
{ {
NS_ENSURE_ARG_POINTER(aResult); NS_ENSURE_ARG_POINTER(aResult);
*aResult = mIDAttributeAtom; *aResult = mIDAttributeAtom;
NS_IF_ADDREF(*aResult);
return NS_OK; return NS_OK;
} }

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

@ -196,6 +196,7 @@ nsNodeInfo::GetIDAttributeAtom(nsIAtom** aResult)
{ {
NS_ENSURE_ARG_POINTER(aResult); NS_ENSURE_ARG_POINTER(aResult);
*aResult = mInner.mIDAttributeAtom; *aResult = mInner.mIDAttributeAtom;
NS_IF_ADDREF(*aResult);
return NS_OK; return NS_OK;
} }

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

@ -899,6 +899,17 @@ MatchName(nsIContent *aContent, const nsAReadableString& aName)
return aContent; return aContent;
} }
} }
else {
nsCOMPtr<nsIXMLContent> xmlContent = do_QueryInterface(aContent);
nsCOMPtr<nsIAtom> IDValue;
if (xmlContent && NS_SUCCEEDED(xmlContent->GetID(*getter_AddRefs(IDValue))) && IDValue) {
const PRUnichar* IDValStr = nsnull;
IDValue->GetUnicode(&IDValStr);
if (aName.Equals(IDValStr)) {
return aContent;
}
}
}
PRInt32 i, count; PRInt32 i, count;
aContent->ChildCount(count); aContent->ChildCount(count);

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

@ -144,6 +144,7 @@ nsresult CStartToken::GetIDAttributeAtom(nsIAtom** aResult)
{ {
NS_ENSURE_ARG_POINTER(aResult); NS_ENSURE_ARG_POINTER(aResult);
*aResult = mIDAttributeAtom; *aResult = mIDAttributeAtom;
NS_IF_ADDREF(*aResult);
return NS_OK; return NS_OK;
} }

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

@ -400,6 +400,7 @@ nsCParserNode::GetIDAttributeAtom(nsIAtom** aResult) const
{ {
NS_ENSURE_ARG_POINTER(aResult); NS_ENSURE_ARG_POINTER(aResult);
*aResult = mIDAttributeAtom; *aResult = mIDAttributeAtom;
NS_IF_ADDREF(*aResult);
return NS_OK; return NS_OK;
} }