mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-26 06:11:37 +00:00
Bug 659539 Part 4: Use nsINode::NodeType where possible. r=bz
This commit is contained in:
parent
b861547d18
commit
fd28a5666a
@ -2764,69 +2764,56 @@ nsGenericElement::Normalize()
|
||||
for (index = 0; (index < count) && (NS_OK == result); index++) {
|
||||
nsIContent *child = GetChildAt(index);
|
||||
|
||||
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(child);
|
||||
if (node) {
|
||||
PRUint16 nodeType;
|
||||
node->GetNodeType(&nodeType);
|
||||
switch (child->NodeType()) {
|
||||
case nsIDOMNode::TEXT_NODE:
|
||||
|
||||
switch (nodeType) {
|
||||
case nsIDOMNode::TEXT_NODE:
|
||||
// ensure that if the text node is empty, it is removed
|
||||
if (0 == child->TextLength()) {
|
||||
if (hasRemoveListeners) {
|
||||
nsContentUtils::MaybeFireNodeRemoved(child, this, doc);
|
||||
}
|
||||
result = RemoveChildAt(index, PR_TRUE);
|
||||
if (NS_FAILED(result)) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// ensure that if the text node is empty, it is removed
|
||||
if (0 == child->TextLength()) {
|
||||
count--;
|
||||
index--;
|
||||
break;
|
||||
}
|
||||
|
||||
if (index+1 < count) {
|
||||
// Get the sibling. If it's also a text node, then
|
||||
// remove it from the tree and join the two text
|
||||
// nodes.
|
||||
nsCOMPtr<nsIContent> sibling = GetChildAt(index + 1);
|
||||
|
||||
if (sibling->NodeType() == nsIDOMNode::TEXT_NODE) {
|
||||
if (hasRemoveListeners) {
|
||||
nsContentUtils::MaybeFireNodeRemoved(child, this, doc);
|
||||
nsContentUtils::MaybeFireNodeRemoved(sibling, this, doc);
|
||||
}
|
||||
result = RemoveChildAt(index, PR_TRUE);
|
||||
result = RemoveChildAt(index+1, PR_TRUE);
|
||||
if (NS_FAILED(result)) {
|
||||
return result;
|
||||
}
|
||||
|
||||
result = JoinTextNodes(child, sibling);
|
||||
if (NS_FAILED(result)) {
|
||||
return result;
|
||||
}
|
||||
count--;
|
||||
index--;
|
||||
break;
|
||||
}
|
||||
|
||||
if (index+1 < count) {
|
||||
// Get the sibling. If it's also a text node, then
|
||||
// remove it from the tree and join the two text
|
||||
// nodes.
|
||||
nsCOMPtr<nsIContent> sibling = GetChildAt(index + 1);
|
||||
}
|
||||
break;
|
||||
|
||||
nsCOMPtr<nsIDOMNode> siblingNode = do_QueryInterface(sibling);
|
||||
case nsIDOMNode::ELEMENT_NODE:
|
||||
nsCOMPtr<nsIDOMElement> element = do_QueryInterface(child);
|
||||
|
||||
if (siblingNode) {
|
||||
PRUint16 siblingNodeType;
|
||||
siblingNode->GetNodeType(&siblingNodeType);
|
||||
|
||||
if (siblingNodeType == nsIDOMNode::TEXT_NODE) {
|
||||
if (hasRemoveListeners) {
|
||||
nsContentUtils::MaybeFireNodeRemoved(sibling, this, doc);
|
||||
}
|
||||
result = RemoveChildAt(index+1, PR_TRUE);
|
||||
if (NS_FAILED(result)) {
|
||||
return result;
|
||||
}
|
||||
|
||||
result = JoinTextNodes(child, sibling);
|
||||
if (NS_FAILED(result)) {
|
||||
return result;
|
||||
}
|
||||
count--;
|
||||
index--;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case nsIDOMNode::ELEMENT_NODE:
|
||||
nsCOMPtr<nsIDOMElement> element = do_QueryInterface(child);
|
||||
|
||||
if (element) {
|
||||
result = element->Normalize();
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (element) {
|
||||
result = element->Normalize();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3607,18 +3594,11 @@ nsINode::doInsertChildAt(nsIContent* aKid, PRUint32 aIndex,
|
||||
mozAutoDocUpdate updateBatch(doc, UPDATE_CONTENT_MODEL, aNotify);
|
||||
|
||||
if (!HasSameOwnerDoc(aKid)) {
|
||||
nsCOMPtr<nsIDOMNode> kid = do_QueryInterface(aKid, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
PRUint16 nodeType = 0;
|
||||
rv = kid->GetNodeType(&nodeType);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// DocumentType nodes are the only nodes that can have a null
|
||||
// ownerDocument according to the DOM spec, and we need to allow
|
||||
// inserting them w/o calling AdoptNode().
|
||||
|
||||
if (nodeType != nsIDOMNode::DOCUMENT_TYPE_NODE || aKid->GetOwnerDoc()) {
|
||||
if (aKid->NodeType() != nsIDOMNode::DOCUMENT_TYPE_NODE ||
|
||||
aKid->GetOwnerDoc()) {
|
||||
rv = AdoptNodeIntoOwnerDoc(this, aKid);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
@ -3832,9 +3812,8 @@ nsGenericElement::SaveSubtreeState()
|
||||
// inserting it's the content before which we're inserting. In the
|
||||
// latter case it may be null.
|
||||
static
|
||||
PRBool IsAllowedAsChild(nsIContent* aNewChild, PRUint16 aNewNodeType,
|
||||
nsINode* aParent, PRBool aIsReplace,
|
||||
nsIContent* aRefContent)
|
||||
PRBool IsAllowedAsChild(nsIContent* aNewChild, nsINode* aParent,
|
||||
PRBool aIsReplace, nsIContent* aRefContent)
|
||||
{
|
||||
NS_PRECONDITION(aNewChild, "Must have new child");
|
||||
NS_PRECONDITION(!aIsReplace || aRefContent,
|
||||
@ -3844,21 +3823,13 @@ PRBool IsAllowedAsChild(nsIContent* aNewChild, PRUint16 aNewNodeType,
|
||||
aParent->IsElement(),
|
||||
"Nodes that are not documents, document fragments or "
|
||||
"elements can't be parents!");
|
||||
#ifdef DEBUG
|
||||
PRUint16 debugNodeType = 0;
|
||||
nsCOMPtr<nsIDOMNode> debugNode(do_QueryInterface(aNewChild));
|
||||
nsresult debugRv = debugNode->GetNodeType(&debugNodeType);
|
||||
|
||||
NS_PRECONDITION(NS_SUCCEEDED(debugRv) && debugNodeType == aNewNodeType,
|
||||
"Bogus node type passed");
|
||||
#endif
|
||||
|
||||
if (aParent && nsContentUtils::ContentIsDescendantOf(aParent, aNewChild)) {
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
// The allowed child nodes differ for documents and elements
|
||||
switch (aNewNodeType) {
|
||||
switch (aNewChild->NodeType()) {
|
||||
case nsIDOMNode::COMMENT_NODE :
|
||||
case nsIDOMNode::PROCESSING_INSTRUCTION_NODE :
|
||||
// OK in both cases
|
||||
@ -3974,10 +3945,7 @@ PRBool IsAllowedAsChild(nsIContent* aNewChild, PRUint16 aNewNodeType,
|
||||
}
|
||||
// If we can put this content at the the right place, we might be ok;
|
||||
// if not, we bail out.
|
||||
nsCOMPtr<nsIDOMNode> childNode(do_QueryInterface(childContent));
|
||||
PRUint16 type;
|
||||
childNode->GetNodeType(&type);
|
||||
if (!IsAllowedAsChild(childContent, type, aParent, aIsReplace,
|
||||
if (!IsAllowedAsChild(childContent, aParent, aIsReplace,
|
||||
aRefContent)) {
|
||||
return PR_FALSE;
|
||||
}
|
||||
@ -4097,7 +4065,7 @@ nsINode::ReplaceOrInsertBefore(PRBool aReplace, nsINode* aNewChild,
|
||||
}
|
||||
|
||||
// Make sure that the inserted node is allowed as a child of its new parent.
|
||||
if (!IsAllowedAsChild(newContent, nodeType, this, aReplace, refContent)) {
|
||||
if (!IsAllowedAsChild(newContent, this, aReplace, refContent)) {
|
||||
return NS_ERROR_DOM_HIERARCHY_REQUEST_ERR;
|
||||
}
|
||||
|
||||
|
@ -80,43 +80,14 @@ nsresult nsTraversal::TestNode(nsINode* aNode, PRInt16* _filtered)
|
||||
|
||||
*_filtered = nsIDOMNodeFilter::FILTER_SKIP;
|
||||
|
||||
PRUint16 nodeType = 0;
|
||||
// Check the most common cases
|
||||
if (aNode->IsElement()) {
|
||||
nodeType = nsIDOMNode::ELEMENT_NODE;
|
||||
}
|
||||
else if (aNode->IsNodeOfType(nsINode::eCONTENT)) {
|
||||
nsIAtom* tag = static_cast<nsIContent*>(aNode)->Tag();
|
||||
if (tag == nsGkAtoms::textTagName) {
|
||||
nodeType = nsIDOMNode::TEXT_NODE;
|
||||
}
|
||||
else if (tag == nsGkAtoms::cdataTagName) {
|
||||
nodeType = nsIDOMNode::CDATA_SECTION_NODE;
|
||||
}
|
||||
else if (tag == nsGkAtoms::commentTagName) {
|
||||
nodeType = nsIDOMNode::COMMENT_NODE;
|
||||
}
|
||||
else if (tag == nsGkAtoms::processingInstructionTagName) {
|
||||
nodeType = nsIDOMNode::PROCESSING_INSTRUCTION_NODE;
|
||||
}
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMNode> domNode;
|
||||
if (!nodeType) {
|
||||
domNode = do_QueryInterface(aNode);
|
||||
rv = domNode->GetNodeType(&nodeType);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
PRUint16 nodeType = aNode->NodeType();
|
||||
|
||||
if (nodeType <= 12 && !((1 << (nodeType-1)) & mWhatToShow)) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (mFilter) {
|
||||
if (!domNode) {
|
||||
domNode = do_QueryInterface(aNode);
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMNode> domNode = do_QueryInterface(aNode);
|
||||
mInAcceptNode = PR_TRUE;
|
||||
rv = mFilter->AcceptNode(domNode, _filtered);
|
||||
mInAcceptNode = PR_FALSE;
|
||||
|
@ -107,10 +107,7 @@ nsXPathExpression::EvaluateWithContext(nsIDOMNode *aContextNode,
|
||||
}
|
||||
}
|
||||
|
||||
nsresult rv;
|
||||
PRUint16 nodeType;
|
||||
rv = aContextNode->GetNodeType(&nodeType);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
PRUint16 nodeType = context->NodeType();
|
||||
|
||||
if (nodeType == nsIDOMNode::TEXT_NODE ||
|
||||
nodeType == nsIDOMNode::CDATA_SECTION_NODE) {
|
||||
@ -147,7 +144,7 @@ nsXPathExpression::EvaluateWithContext(nsIDOMNode *aContextNode,
|
||||
EvalContextImpl eContext(*contextNode, aContextPosition, aContextSize,
|
||||
mRecycler);
|
||||
nsRefPtr<txAExprResult> exprResult;
|
||||
rv = mExpression->evaluate(&eContext, getter_AddRefs(exprResult));
|
||||
nsresult rv = mExpression->evaluate(&eContext, getter_AddRefs(exprResult));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
PRUint16 resultType = aType;
|
||||
|
@ -514,11 +514,7 @@ txXPathNodeUtils::getNodeType(const txXPathNode& aNode)
|
||||
}
|
||||
|
||||
if (aNode.isContent()) {
|
||||
PRUint16 type;
|
||||
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(aNode.mNode);
|
||||
node->GetNodeType(&type);
|
||||
|
||||
return type;
|
||||
return aNode.mNode->NodeType();
|
||||
}
|
||||
|
||||
return txXPathNodeType::ATTRIBUTE_NODE;
|
||||
|
@ -2180,13 +2180,9 @@ nsFocusManager::GetSelectionLocation(nsIDocument* aDocument,
|
||||
// logical frame's primary node - so for this case we need to
|
||||
// change caretContent to that node.
|
||||
|
||||
nsCOMPtr<nsIDOMNode> domNode(do_QueryInterface(startContent));
|
||||
PRUint16 nodeType;
|
||||
domNode->GetNodeType(&nodeType);
|
||||
|
||||
if (nodeType == nsIDOMNode::TEXT_NODE) {
|
||||
if (startContent->NodeType() == nsIDOMNode::TEXT_NODE) {
|
||||
nsAutoString nodeValue;
|
||||
domNode->GetNodeValue(nodeValue);
|
||||
startContent->AppendTextTo(nodeValue);
|
||||
|
||||
PRBool isFormControl =
|
||||
startContent->IsNodeOfType(nsINode::eHTML_FORM_CONTROL);
|
||||
|
@ -3985,31 +3985,14 @@ void
|
||||
nsTextServicesDocument::PrintContentNode(nsIContent *aContent)
|
||||
{
|
||||
nsString tmpStr, str;
|
||||
nsresult result;
|
||||
|
||||
aContent->Tag()->ToString(tmpStr);
|
||||
printf("%s", NS_LossyConvertUTF16toASCII(tmpStr).get());
|
||||
|
||||
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(aContent);
|
||||
|
||||
if (node)
|
||||
if (nsIDOMNode::TEXT_NODE == aContent->NodeType())
|
||||
{
|
||||
PRUint16 type;
|
||||
|
||||
result = node->GetNodeType(&type);
|
||||
|
||||
if (NS_FAILED(result))
|
||||
return;
|
||||
|
||||
if (nsIDOMNode::TEXT_NODE == type)
|
||||
{
|
||||
result = node->GetNodeValue(str);
|
||||
|
||||
if (NS_FAILED(result))
|
||||
return;
|
||||
|
||||
printf(": \"%s\"", NS_LossyConvertUTF16toASCII(str).get());
|
||||
}
|
||||
aContent->AppendTextTo(str);
|
||||
printf(": \"%s\"", NS_LossyConvertUTF16toASCII(str).get());
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
|
Loading…
Reference in New Issue
Block a user