summaryrefslogtreecommitdiff
path: root/editor
diff options
context:
space:
mode:
authorMatt A. Tobin <email@mattatobin.com>2020-04-17 05:28:43 -0400
committerMatt A. Tobin <email@mattatobin.com>2020-04-17 05:28:43 -0400
commit940d191ef8b61309f4ea83d0fea77828f361251b (patch)
tree328a57b6d2e2b018343e2c5d20e0602d613f0e19 /editor
parentef689a705ffdd79cdeeca8e68438b4ad6597f38d (diff)
downloaduxp-940d191ef8b61309f4ea83d0fea77828f361251b.tar.gz
Bug 1367683 - Optimize initializing nsRange
Tag #1375
Diffstat (limited to 'editor')
-rw-r--r--editor/libeditor/HTMLEditRules.cpp111
-rw-r--r--editor/libeditor/HTMLEditor.cpp4
-rw-r--r--editor/libeditor/HTMLStyleEditor.cpp26
-rw-r--r--editor/libeditor/SelectionState.cpp3
-rw-r--r--editor/libeditor/WSRunObject.cpp2
-rw-r--r--editor/txtsvc/nsTextServicesDocument.cpp12
6 files changed, 88 insertions, 70 deletions
diff --git a/editor/libeditor/HTMLEditRules.cpp b/editor/libeditor/HTMLEditRules.cpp
index fcbb75ee6f..0aa2bde8c1 100644
--- a/editor/libeditor/HTMLEditRules.cpp
+++ b/editor/libeditor/HTMLEditRules.cpp
@@ -1422,16 +1422,15 @@ HTMLEditRules::WillInsertText(EditAction aAction,
if (!mDocChangeRange) {
mDocChangeRange = new nsRange(selNode);
}
- rv = mDocChangeRange->SetStart(selNode, selOffset);
- NS_ENSURE_SUCCESS(rv, rv);
if (curNode) {
- rv = mDocChangeRange->SetEnd(curNode, curOffset);
+ rv = mDocChangeRange->SetStartAndEnd(selNode, selOffset,
+ curNode, curOffset);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
} else {
- rv = mDocChangeRange->SetEnd(selNode, selOffset);
+ rv = mDocChangeRange->CollapseTo(selNode, selOffset);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
@@ -5093,10 +5092,11 @@ HTMLEditRules::ExpandSelectionForDeletion(Selection& aSelection)
// Create a range that represents expanded selection
RefPtr<nsRange> range = new nsRange(selStartNode);
- nsresult rv = range->SetStart(selStartNode, selStartOffset);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = range->SetEnd(selEndNode, selEndOffset);
- NS_ENSURE_SUCCESS(rv, rv);
+ nsresult rv = range->SetStartAndEnd(selStartNode, selStartOffset,
+ selEndNode, selEndOffset);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
// Check if block is entirely inside range
if (brBlock) {
@@ -5558,26 +5558,27 @@ HTMLEditRules::PromoteRange(nsRange& aRange,
// This is tricky. The basic idea is to push out the range endpoints to
// truly enclose the blocks that we will affect.
- nsCOMPtr<nsIDOMNode> opStartNode;
- nsCOMPtr<nsIDOMNode> opEndNode;
+ nsCOMPtr<nsIDOMNode> opDOMStartNode;
+ nsCOMPtr<nsIDOMNode> opDOMEndNode;
int32_t opStartOffset, opEndOffset;
GetPromotedPoint(kStart, GetAsDOMNode(startNode), startOffset,
- aOperationType, address_of(opStartNode), &opStartOffset);
+ aOperationType, address_of(opDOMStartNode), &opStartOffset);
GetPromotedPoint(kEnd, GetAsDOMNode(endNode), endOffset, aOperationType,
- address_of(opEndNode), &opEndOffset);
+ address_of(opDOMEndNode), &opEndOffset);
// Make sure that the new range ends up to be in the editable section.
if (!htmlEditor->IsDescendantOfEditorRoot(
- EditorBase::GetNodeAtRangeOffsetPoint(opStartNode, opStartOffset)) ||
+ EditorBase::GetNodeAtRangeOffsetPoint(opDOMStartNode, opStartOffset)) ||
!htmlEditor->IsDescendantOfEditorRoot(
- EditorBase::GetNodeAtRangeOffsetPoint(opEndNode, opEndOffset - 1))) {
+ EditorBase::GetNodeAtRangeOffsetPoint(opDOMEndNode, opEndOffset - 1))) {
return;
}
- DebugOnly<nsresult> rv = aRange.SetStart(opStartNode, opStartOffset);
- MOZ_ASSERT(NS_SUCCEEDED(rv));
- rv = aRange.SetEnd(opEndNode, opEndOffset);
+ nsCOMPtr<nsINode> opStartNode = do_QueryInterface(opDOMStartNode);
+ nsCOMPtr<nsINode> opEndNode = do_QueryInterface(opDOMEndNode);
+ DebugOnly<nsresult> rv =
+ aRange.SetStartAndEnd(opStartNode, opStartOffset, opEndNode, opEndOffset);
MOZ_ASSERT(NS_SUCCEEDED(rv));
}
@@ -7196,10 +7197,10 @@ HTMLEditRules::PinSelectionToNewBlock(Selection* aSelection)
nsCOMPtr<nsINode> node = do_QueryInterface(selNode);
NS_ENSURE_STATE(node);
RefPtr<nsRange> range = new nsRange(node);
- rv = range->SetStart(selNode, selOffset);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = range->SetEnd(selNode, selOffset);
- NS_ENSURE_SUCCESS(rv, rv);
+ rv = range->CollapseTo(node, selOffset);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
bool nodeBefore, nodeAfter;
rv = nsRange::CompareNodeToRange(mNewBlock, range, &nodeBefore, &nodeAfter);
NS_ENSURE_SUCCESS(rv, rv);
@@ -8095,10 +8096,13 @@ HTMLEditRules::DidSplitNode(nsIDOMNode* aExistingRightNode,
if (!mListenerEnabled) {
return NS_OK;
}
- nsresult rv = mUtilRange->SetStart(aNewLeftNode, 0);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = mUtilRange->SetEnd(aExistingRightNode, 0);
- NS_ENSURE_SUCCESS(rv, rv);
+ nsCOMPtr<nsINode> newLeftNode = do_QueryInterface(aNewLeftNode);
+ nsCOMPtr<nsINode> existingRightNode = do_QueryInterface(aExistingRightNode);
+ nsresult rv = mUtilRange->SetStartAndEnd(newLeftNode, 0,
+ existingRightNode, 0);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
return UpdateDocChangeRange(mUtilRange);
}
@@ -8123,11 +8127,12 @@ HTMLEditRules::DidJoinNodes(nsIDOMNode* aLeftNode,
if (!mListenerEnabled) {
return NS_OK;
}
+ nsCOMPtr<nsINode> rightNode = do_QueryInterface(aRightNode);
// assumption that Join keeps the righthand node
- nsresult rv = mUtilRange->SetStart(aRightNode, mJoinOffset);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = mUtilRange->SetEnd(aRightNode, mJoinOffset);
- NS_ENSURE_SUCCESS(rv, rv);
+ nsresult rv = mUtilRange->CollapseTo(rightNode, mJoinOffset);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
return UpdateDocChangeRange(mUtilRange);
}
@@ -8149,11 +8154,12 @@ HTMLEditRules::DidInsertText(nsIDOMCharacterData* aTextNode,
return NS_OK;
}
int32_t length = aString.Length();
- nsCOMPtr<nsIDOMNode> theNode = do_QueryInterface(aTextNode);
- nsresult rv = mUtilRange->SetStart(theNode, aOffset);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = mUtilRange->SetEnd(theNode, aOffset+length);
- NS_ENSURE_SUCCESS(rv, rv);
+ nsCOMPtr<nsINode> theNode = do_QueryInterface(aTextNode);
+ nsresult rv = mUtilRange->SetStartAndEnd(theNode, aOffset,
+ theNode, aOffset + length);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
return UpdateDocChangeRange(mUtilRange);
}
@@ -8174,11 +8180,11 @@ HTMLEditRules::DidDeleteText(nsIDOMCharacterData* aTextNode,
if (!mListenerEnabled) {
return NS_OK;
}
- nsCOMPtr<nsIDOMNode> theNode = do_QueryInterface(aTextNode);
- nsresult rv = mUtilRange->SetStart(theNode, aOffset);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = mUtilRange->SetEnd(theNode, aOffset);
- NS_ENSURE_SUCCESS(rv, rv);
+ nsCOMPtr<nsINode> theNode = do_QueryInterface(aTextNode);
+ nsresult rv = mUtilRange->CollapseTo(theNode, aOffset);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
return UpdateDocChangeRange(mUtilRange);
}
@@ -8193,22 +8199,27 @@ HTMLEditRules::WillDeleteSelection(nsISelection* aSelection)
}
RefPtr<Selection> selection = aSelection->AsSelection();
// get the (collapsed) selection location
- nsCOMPtr<nsIDOMNode> selNode;
- int32_t selOffset;
-
+ nsCOMPtr<nsINode> startNode;
+ int32_t startOffset;
NS_ENSURE_STATE(mHTMLEditor);
nsresult rv =
mHTMLEditor->GetStartNodeAndOffset(selection,
- getter_AddRefs(selNode), &selOffset);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = mUtilRange->SetStart(selNode, selOffset);
- NS_ENSURE_SUCCESS(rv, rv);
+ getter_AddRefs(startNode), &startOffset);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
+ nsCOMPtr<nsINode> endNode;
+ int32_t endOffset;
NS_ENSURE_STATE(mHTMLEditor);
rv = mHTMLEditor->GetEndNodeAndOffset(selection,
- getter_AddRefs(selNode), &selOffset);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = mUtilRange->SetEnd(selNode, selOffset);
- NS_ENSURE_SUCCESS(rv, rv);
+ getter_AddRefs(endNode), &endOffset);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
+ rv = mUtilRange->SetStartAndEnd(startNode, startOffset, endNode, endOffset);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
return UpdateDocChangeRange(mUtilRange);
}
diff --git a/editor/libeditor/HTMLEditor.cpp b/editor/libeditor/HTMLEditor.cpp
index 532da7a150..73dd1673b2 100644
--- a/editor/libeditor/HTMLEditor.cpp
+++ b/editor/libeditor/HTMLEditor.cpp
@@ -3284,8 +3284,8 @@ HTMLEditor::DoContentInserted(nsIDocument* aDocument,
sibling = sibling->GetNextSibling();
}
}
- nsresult rv = range->Set(aContainer, aIndexInContainer,
- aContainer, endIndex);
+ nsresult rv = range->SetStartAndEnd(aContainer, aIndexInContainer,
+ aContainer, endIndex);
if (NS_SUCCEEDED(rv)) {
mInlineSpellChecker->SpellCheckRange(range);
}
diff --git a/editor/libeditor/HTMLStyleEditor.cpp b/editor/libeditor/HTMLStyleEditor.cpp
index 6a1ffe8b41..7141cfd61e 100644
--- a/editor/libeditor/HTMLStyleEditor.cpp
+++ b/editor/libeditor/HTMLStyleEditor.cpp
@@ -541,9 +541,11 @@ HTMLEditor::SplitStyleAboveRange(nsRange* inRange,
NS_ENSURE_SUCCESS(rv, rv);
// reset the range
- rv = inRange->SetStart(startNode, startOffset);
- NS_ENSURE_SUCCESS(rv, rv);
- return inRange->SetEnd(endNode, endOffset);
+ rv = inRange->SetStartAndEnd(startNode, startOffset, endNode, endOffset);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
+ return NS_OK;
}
nsresult
@@ -885,10 +887,11 @@ HTMLEditor::PromoteRangeIfStartsOrEndsInNamedAnchor(nsRange& aRange)
endOffset = endNode ? endNode->IndexOf(parent) + 1 : 0;
}
- nsresult rv = aRange.SetStart(startNode, startOffset);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = aRange.SetEnd(endNode, endOffset);
- NS_ENSURE_SUCCESS(rv, rv);
+ nsresult rv = aRange.SetStartAndEnd(startNode, startOffset,
+ endNode, endOffset);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
return NS_OK;
}
@@ -918,10 +921,11 @@ HTMLEditor::PromoteInlineRange(nsRange& aRange)
endNode = parent;
}
- nsresult rv = aRange.SetStart(startNode, startOffset);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = aRange.SetEnd(endNode, endOffset);
- NS_ENSURE_SUCCESS(rv, rv);
+ nsresult rv = aRange.SetStartAndEnd(startNode, startOffset,
+ endNode, endOffset);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
return NS_OK;
}
diff --git a/editor/libeditor/SelectionState.cpp b/editor/libeditor/SelectionState.cpp
index f9ad5947a8..057e048758 100644
--- a/editor/libeditor/SelectionState.cpp
+++ b/editor/libeditor/SelectionState.cpp
@@ -686,7 +686,8 @@ already_AddRefed<nsRange>
RangeItem::GetRange()
{
RefPtr<nsRange> range = new nsRange(startNode);
- if (NS_FAILED(range->Set(startNode, startOffset, endNode, endOffset))) {
+ if (NS_FAILED(range->SetStartAndEnd(startNode, startOffset,
+ endNode, endOffset))) {
return nullptr;
}
return range.forget();
diff --git a/editor/libeditor/WSRunObject.cpp b/editor/libeditor/WSRunObject.cpp
index 39ac3fee86..0748f09e53 100644
--- a/editor/libeditor/WSRunObject.cpp
+++ b/editor/libeditor/WSRunObject.cpp
@@ -1315,7 +1315,7 @@ WSRunObject::DeleteChars(nsINode* aStartNode,
if (!range) {
range = new nsRange(aStartNode);
nsresult rv =
- range->Set(aStartNode, aStartOffset, aEndNode, aEndOffset);
+ range->SetStartAndEnd(aStartNode, aStartOffset, aEndNode, aEndOffset);
NS_ENSURE_SUCCESS(rv, rv);
}
bool nodeBefore, nodeAfter;
diff --git a/editor/txtsvc/nsTextServicesDocument.cpp b/editor/txtsvc/nsTextServicesDocument.cpp
index e0c779683b..ccf964d2cf 100644
--- a/editor/txtsvc/nsTextServicesDocument.cpp
+++ b/editor/txtsvc/nsTextServicesDocument.cpp
@@ -406,11 +406,13 @@ nsTextServicesDocument::ExpandRangeToWordBoundaries(nsIDOMRange *aRange)
// Now adjust the range so that it uses our new
// end points.
-
- rv = range->SetEnd(rngEndNode, rngEndOffset);
- NS_ENSURE_SUCCESS(rv, rv);
-
- return range->SetStart(rngStartNode, rngStartOffset);
+ nsCOMPtr<nsINode> startNode = do_QueryInterface(rngStartNode);
+ nsCOMPtr<nsINode> endNode = do_QueryInterface(rngEndNode);
+ rv = range->SetStartAndEnd(startNode, rngStartOffset, endNode, rngEndOffset);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return rv;
+ }
+ return NS_OK;
}
NS_IMETHODIMP