Bug 1432186 part 12. Remove nsIDOMNode's previousSibling attribute. r=mccr8

MozReview-Commit-ID: 7UJFaxEnT9Q
This commit is contained in:
Boris Zbarsky 2018-01-29 23:10:51 -05:00
parent e2ce75877d
commit 97302665b4
9 changed files with 47 additions and 85 deletions

View File

@ -532,16 +532,6 @@ nsINode::GetChildNodes(nsIDOMNodeList** aChildNodes)
return NS_OK;
}
nsresult
nsINode::GetPreviousSibling(nsIDOMNode** aPrevSibling)
{
*aPrevSibling = nullptr;
nsIContent *sibling = GetPreviousSibling();
return sibling ? CallQueryInterface(sibling, aPrevSibling) : NS_OK;
}
nsresult
nsINode::GetNextSibling(nsIDOMNode** aNextSibling)
{

View File

@ -2078,7 +2078,6 @@ protected:
// NS_FORWARD_NSIDOMNODE_TO_NSINODE_HELPER and for quickstubs.
nsresult GetParentNode(nsIDOMNode** aParentNode);
nsresult GetChildNodes(nsIDOMNodeList** aChildNodes);
nsresult GetPreviousSibling(nsIDOMNode** aPrevSibling);
nsresult GetNextSibling(nsIDOMNode** aNextSibling);
nsresult GetOwnerDocument(nsIDOMDocument** aOwnerDocument);
@ -2275,10 +2274,6 @@ ToCanonicalSupports(nsINode* aPointer)
{ \
return nsINode::GetChildNodes(aChildNodes); \
} \
NS_IMETHOD GetPreviousSibling(nsIDOMNode** aPreviousSibling) __VA_ARGS__ override \
{ \
return nsINode::GetPreviousSibling(aPreviousSibling); \
} \
NS_IMETHOD GetNextSibling(nsIDOMNode** aNextSibling) __VA_ARGS__ override \
{ \
return nsINode::GetNextSibling(aNextSibling); \

View File

@ -738,7 +738,6 @@ nsXHTMLContentSerializer::SerializeLIValueAttribute(nsIContent* aElement,
// It may not be the first LI child of OL but it's first in the selected range.
// Note that we get into this condition only once per a OL.
bool found = false;
nsCOMPtr<nsIDOMNode> currNode = do_QueryInterface(aElement);
nsAutoString valueStr;
olState state (0, false);
@ -755,27 +754,21 @@ nsXHTMLContentSerializer::SerializeLIValueAttribute(nsIContent* aElement,
int32_t offset = 0;
// Traverse previous siblings until we find one with "value" attribute.
// offset keeps track of how many previous siblings we had tocurrNode traverse.
// offset keeps track of how many previous siblings we had to traverse.
nsIContent* currNode = aElement;
while (currNode && !found) {
nsCOMPtr<nsIDOMElement> currElement = do_QueryInterface(currNode);
// currElement may be null if it were a text node.
if (currElement) {
nsAutoString tagName;
currElement->GetTagName(tagName);
if (tagName.LowerCaseEqualsLiteral("li")) {
currElement->GetAttribute(NS_LITERAL_STRING("value"), valueStr);
if (valueStr.IsEmpty())
offset++;
else {
found = true;
nsresult rv = NS_OK;
startVal = valueStr.ToInteger(&rv);
}
if (currNode->IsHTMLElement(nsGkAtoms::li)) {
currNode->AsElement()->GetAttr(kNameSpaceID_None,
nsGkAtoms::value, valueStr);
if (valueStr.IsEmpty()) {
offset++;
} else {
found = true;
nsresult rv = NS_OK;
startVal = valueStr.ToInteger(&rv);
}
}
nsCOMPtr<nsIDOMNode> tmp;
currNode->GetPreviousSibling(getter_AddRefs(tmp));
currNode.swap(tmp);
currNode = currNode->GetPreviousSibling();
}
// If LI was not having "value", Set the "value" attribute for it.
// Note that We are at the first LI in the selected range of OL.

View File

@ -34,7 +34,6 @@ interface nsIDOMNode : nsISupports
readonly attribute nsIDOMNode parentNode;
readonly attribute nsIDOMNodeList childNodes;
readonly attribute nsIDOMNode previousSibling;
readonly attribute nsIDOMNode nextSibling;
// Modified in DOM Level 2:
readonly attribute nsIDOMDocument ownerDocument;

View File

@ -3545,7 +3545,7 @@ HTMLEditor::CollapseAdjacentTextNodes(nsRange* aInRange)
{
NS_ENSURE_TRUE(aInRange, NS_ERROR_NULL_POINTER);
AutoTransactionsConserveSelection dontChangeMySelection(this);
nsTArray<nsCOMPtr<nsIDOMNode> > textNodes;
nsTArray<nsCOMPtr<nsINode>> textNodes;
// we can't actually do anything during iteration, so store the text nodes in an array
// don't bother ref counting them because we know we can hold them for the
// lifetime of this method
@ -3562,9 +3562,8 @@ HTMLEditor::CollapseAdjacentTextNodes(nsRange* aInRange)
while (!iter->IsDone()) {
nsINode* node = iter->GetCurrentNode();
if (node->NodeType() == nsIDOMNode::TEXT_NODE &&
IsEditable(static_cast<nsIContent*>(node))) {
nsCOMPtr<nsIDOMNode> domNode = do_QueryInterface(node);
textNodes.AppendElement(domNode);
IsEditable(node->AsContent())) {
textNodes.AppendElement(node);
}
iter->Next();
@ -3574,20 +3573,17 @@ HTMLEditor::CollapseAdjacentTextNodes(nsRange* aInRange)
// NOTE: assumption that JoinNodes keeps the righthand node
while (textNodes.Length() > 1) {
// we assume a textNodes entry can't be nullptr
nsIDOMNode *leftTextNode = textNodes[0];
nsIDOMNode *rightTextNode = textNodes[1];
nsINode* leftTextNode = textNodes[0];
nsINode* rightTextNode = textNodes[1];
NS_ASSERTION(leftTextNode && rightTextNode,"left or rightTextNode null in CollapseAdjacentTextNodes");
// get the prev sibling of the right node, and see if its leftTextNode
nsCOMPtr<nsIDOMNode> prevSibOfRightNode;
rv = rightTextNode->GetPreviousSibling(getter_AddRefs(prevSibOfRightNode));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsINode> prevSibOfRightNode = rightTextNode->GetPreviousSibling();
if (prevSibOfRightNode && prevSibOfRightNode == leftTextNode) {
nsCOMPtr<nsIDOMNode> parent;
rv = rightTextNode->GetParentNode(getter_AddRefs(parent));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsINode> parent = rightTextNode->GetParentNode();
NS_ENSURE_TRUE(parent, NS_ERROR_NULL_POINTER);
rv = JoinNodes(leftTextNode, rightTextNode, parent);
rv = JoinNodes(leftTextNode->AsDOMNode(), rightTextNode->AsDOMNode(),
parent->AsDOMNode());
NS_ENSURE_SUCCESS(rv, rv);
}

View File

@ -193,10 +193,9 @@ nsFilteredContentIterator::First()
}
nsINode *currentNode = mCurrentIterator->GetCurrentNode();
nsCOMPtr<nsIDOMNode> node(do_QueryInterface(currentNode));
bool didCross;
CheckAdvNode(node, didCross, eForward);
CheckAdvNode(currentNode, didCross, eForward);
}
//------------------------------------------------------------
@ -224,10 +223,9 @@ nsFilteredContentIterator::Last()
}
nsINode *currentNode = mCurrentIterator->GetCurrentNode();
nsCOMPtr<nsIDOMNode> node(do_QueryInterface(currentNode));
bool didCross;
CheckAdvNode(node, didCross, eBackward);
CheckAdvNode(currentNode, didCross, eBackward);
}
///////////////////////////////////////////////////////////////////////////
@ -284,12 +282,13 @@ ContentIsInTraversalRange(nsIContent* aContent, bool aIsPreMode,
}
static bool
ContentIsInTraversalRange(nsRange* aRange, nsIDOMNode* aNextNode, bool aIsPreMode)
ContentIsInTraversalRange(nsRange* aRange, nsIContent* aNextContent, bool aIsPreMode)
{
nsCOMPtr<nsIContent> content(do_QueryInterface(aNextNode));
NS_ENSURE_TRUE(content && aRange, false);
// XXXbz we have a caller below (in AdvanceNode) who passes null for
// aNextContent!
NS_ENSURE_TRUE(aNextContent && aRange, false);
return ContentIsInTraversalRange(content, aIsPreMode,
return ContentIsInTraversalRange(aNextContent, aIsPreMode,
aRange->GetStartContainer(),
static_cast<int32_t>(aRange->StartOffset()),
aRange->GetEndContainer(),
@ -299,19 +298,20 @@ ContentIsInTraversalRange(nsRange* aRange, nsIDOMNode* aNextNode, bool aIsPreMod
//------------------------------------------------------------
// Helper function to advance to the next or previous node
nsresult
nsFilteredContentIterator::AdvanceNode(nsIDOMNode* aNode, nsIDOMNode*& aNewNode, eDirectionType aDir)
nsFilteredContentIterator::AdvanceNode(nsINode* aNode, nsINode*& aNewNode, eDirectionType aDir)
{
nsCOMPtr<nsIDOMNode> nextNode;
nsCOMPtr<nsIContent> nextNode;
if (aDir == eForward) {
aNode->GetNextSibling(getter_AddRefs(nextNode));
nextNode = aNode->GetNextSibling();
} else {
aNode->GetPreviousSibling(getter_AddRefs(nextNode));
nextNode = aNode->GetPreviousSibling();
}
if (nextNode) {
// If we got here, that means we found the nxt/prv node
// make sure it is in our DOMRange
bool intersects = ContentIsInTraversalRange(mRange, nextNode, aDir == eForward);
bool intersects = ContentIsInTraversalRange(mRange, nextNode,
aDir == eForward);
if (intersects) {
aNewNode = nextNode;
NS_ADDREF(aNewNode);
@ -319,11 +319,12 @@ nsFilteredContentIterator::AdvanceNode(nsIDOMNode* aNode, nsIDOMNode*& aNewNode,
}
} else {
// The next node was null so we need to walk up the parent(s)
nsCOMPtr<nsIDOMNode> parent;
aNode->GetParentNode(getter_AddRefs(parent));
nsCOMPtr<nsINode> parent = aNode->GetParentNode();
NS_ASSERTION(parent, "parent can't be nullptr");
// Make sure the parent is in the DOMRange before going further
// XXXbz why are we passing nextNode, not the parent??? If this gets fixed,
// then ContentIsInTraversalRange can stop null-checking its second arg.
bool intersects = ContentIsInTraversalRange(mRange, nextNode, aDir == eForward);
if (intersects) {
// Now find the nxt/prv node after/before this node
@ -344,21 +345,21 @@ nsFilteredContentIterator::AdvanceNode(nsIDOMNode* aNode, nsIDOMNode*& aNewNode,
//------------------------------------------------------------
// Helper function to see if the next/prev node should be skipped
void
nsFilteredContentIterator::CheckAdvNode(nsIDOMNode* aNode, bool& aDidSkip, eDirectionType aDir)
nsFilteredContentIterator::CheckAdvNode(nsINode* aNode, bool& aDidSkip, eDirectionType aDir)
{
aDidSkip = false;
mIsOutOfRange = false;
if (aNode && mFilter) {
nsCOMPtr<nsIDOMNode> currentNode = aNode;
nsCOMPtr<nsINode> currentNode = aNode;
bool skipIt;
while (1) {
nsresult rv = mFilter->Skip(aNode, &skipIt);
nsresult rv = mFilter->Skip(aNode->AsDOMNode(), &skipIt);
if (NS_SUCCEEDED(rv) && skipIt) {
aDidSkip = true;
// Get the next/prev node and then
// see if we should skip that
nsCOMPtr<nsIDOMNode> advNode;
nsCOMPtr<nsINode> advNode;
rv = AdvanceNode(aNode, *getter_AddRefs(advNode), aDir);
if (NS_SUCCEEDED(rv) && advNode) {
aNode = advNode;
@ -404,8 +405,7 @@ nsFilteredContentIterator::Next()
// don't check to see if we can skip it
nsINode *currentNode = mCurrentIterator->GetCurrentNode();
nsCOMPtr<nsIDOMNode> node(do_QueryInterface(currentNode));
CheckAdvNode(node, mDidSkip, eForward);
CheckAdvNode(currentNode, mDidSkip, eForward);
}
void
@ -436,8 +436,7 @@ nsFilteredContentIterator::Prev()
// don't check to see if we can skip it
nsINode *currentNode = mCurrentIterator->GetCurrentNode();
nsCOMPtr<nsIDOMNode> node(do_QueryInterface(currentNode));
CheckAdvNode(node, mDidSkip, eBackward);
CheckAdvNode(currentNode, mDidSkip, eBackward);
}
nsINode *

View File

@ -60,8 +60,8 @@ protected:
// enum to give us the direction
typedef enum {eDirNotSet, eForward, eBackward} eDirectionType;
nsresult AdvanceNode(nsIDOMNode* aNode, nsIDOMNode*& aNewNode, eDirectionType aDir);
void CheckAdvNode(nsIDOMNode* aNode, bool& aDidSkip, eDirectionType aDir);
nsresult AdvanceNode(nsINode* aNode, nsINode*& aNewNode, eDirectionType aDir);
void CheckAdvNode(nsINode* aNode, bool& aDidSkip, eDirectionType aDir);
nsresult SwitchDirections(bool aChangeToForward);
nsCOMPtr<nsIContentIterator> mCurrentIterator;

View File

@ -807,8 +807,8 @@ inDOMView::ContentInserted(nsIDocument *aDocument, nsIContent* aContainer,
}
// get the previous sibling of the inserted content
nsCOMPtr<nsIDOMNode> previous;
GetRealPreviousSibling(childDOMNode, parent, getter_AddRefs(previous));
// This should probably be done on the flattened tree instead.
nsCOMPtr<nsIDOMNode> previous = do_QueryInterface(aChild->GetPreviousSibling());
inDOMViewNode* previousNode = nullptr;
int32_t row = 0;
@ -1191,15 +1191,6 @@ inDOMView::GetChildNodesFor(nsIDOMNode* aNode, nsCOMArray<nsIDOMNode>& aResult)
return NS_OK;
}
nsresult
inDOMView::GetRealPreviousSibling(nsIDOMNode* aNode, nsIDOMNode* aRealParent, nsIDOMNode** aSibling)
{
// XXXjrh: This won't work for some cases during some situations where XBL insertion points
// are involved. Fix me!
aNode->GetPreviousSibling(aSibling);
return NS_OK;
}
void
inDOMView::AppendKidsToArray(nsINodeList* aKids,
nsCOMArray<nsIDOMNode>& aArray)

View File

@ -84,7 +84,6 @@ protected:
nsresult AppendAttrsToArray(nsDOMAttributeMap* aKids, nsCOMArray<nsIDOMNode>& aArray);
nsresult GetFirstDescendantOf(inDOMViewNode* aNode, int32_t aRow, int32_t* aResult);
nsresult GetLastDescendantOf(inDOMViewNode* aNode, int32_t aRow, int32_t* aResult);
nsresult GetRealPreviousSibling(nsIDOMNode* aNode, nsIDOMNode* aRealParent, nsIDOMNode** aSibling);
};
// {FB5C1775-1BBD-4b9c-ABB0-AE7ACD29E87E}