Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit d0644e9

Browse files
Bug 1734771 - part 9: Make ContentEventHandler::GetTextLengthInRange() and ContentEventHandler::AppendFontRanges() take const Text& instead of nsIContent* r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D128146
1 parent aa245e4 commit d0644e9

File tree

2 files changed

+19
-23
lines changed

2 files changed

+19
-23
lines changed

dom/events/ContentEventHandler.cpp

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -751,26 +751,21 @@ static FontRange* AppendFontRange(nsTArray<FontRange>& aFontRanges,
751751

752752
/* static */
753753
uint32_t ContentEventHandler::GetTextLengthInRange(
754-
nsIContent* aContent, uint32_t aXPStartOffset, uint32_t aXPEndOffset,
754+
const Text& aTextNode, uint32_t aXPStartOffset, uint32_t aXPEndOffset,
755755
LineBreakType aLineBreakType) {
756-
MOZ_ASSERT(aContent->IsText());
757-
758756
return aLineBreakType == LINE_BREAK_TYPE_NATIVE
759-
? GetNativeTextLength(*aContent->AsText(), aXPStartOffset,
760-
aXPEndOffset)
757+
? GetNativeTextLength(aTextNode, aXPStartOffset, aXPEndOffset)
761758
: aXPEndOffset - aXPStartOffset;
762759
}
763760

764761
/* static */
765762
void ContentEventHandler::AppendFontRanges(FontRangeArray& aFontRanges,
766-
nsIContent* aContent,
763+
const Text& aTextNode,
767764
uint32_t aBaseOffset,
768765
uint32_t aXPStartOffset,
769766
uint32_t aXPEndOffset,
770767
LineBreakType aLineBreakType) {
771-
MOZ_ASSERT(aContent->IsText());
772-
773-
nsIFrame* frame = aContent->GetPrimaryFrame();
768+
nsIFrame* frame = aTextNode.GetPrimaryFrame();
774769
if (!frame) {
775770
// It is a non-rendered content, create an empty range for it.
776771
AppendFontRange(aFontRanges, aBaseOffset);
@@ -826,7 +821,7 @@ void ContentEventHandler::AppendFontRanges(FontRangeArray& aFontRanges,
826821
if (startXPOffset > lastXPEndOffset) {
827822
// Create range for skipped leading chars.
828823
AppendFontRange(aFontRanges, baseOffset);
829-
baseOffset += GetTextLengthInRange(aContent, lastXPEndOffset,
824+
baseOffset += GetTextLengthInRange(aTextNode, lastXPEndOffset,
830825
startXPOffset, aLineBreakType);
831826
}
832827

@@ -848,15 +843,15 @@ void ContentEventHandler::AppendFontRanges(FontRangeArray& aFontRanges,
848843
uint32_t endXPOffset =
849844
iter.ConvertSkippedToOriginal(runIter.GetStringEnd());
850845
endXPOffset = std::min(frameXPEnd, endXPOffset);
851-
baseOffset += GetTextLengthInRange(aContent, startXPOffset, endXPOffset,
846+
baseOffset += GetTextLengthInRange(aTextNode, startXPOffset, endXPOffset,
852847
aLineBreakType);
853848
lastXPEndOffset = endXPOffset;
854849
}
855850
if (lastXPEndOffset < frameXPEnd) {
856851
// Create range for skipped trailing chars. It also handles case
857852
// that the whole frame contains only skipped chars.
858853
AppendFontRange(aFontRanges, baseOffset);
859-
baseOffset += GetTextLengthInRange(aContent, lastXPEndOffset, frameXPEnd,
854+
baseOffset += GetTextLengthInRange(aTextNode, lastXPEndOffset, frameXPEnd,
860855
aLineBreakType);
861856
}
862857

@@ -880,7 +875,7 @@ nsresult ContentEventHandler::GenerateFlatFontRanges(
880875
}
881876

882877
// baseOffset is the flattened offset of each content node.
883-
int32_t baseOffset = 0;
878+
uint32_t baseOffset = 0;
884879
PreContentIterator preOrderIter;
885880
nsresult rv =
886881
preOrderIter.Init(aRawRange.Start().AsRaw(), aRawRange.End().AsRaw());
@@ -897,14 +892,15 @@ nsresult ContentEventHandler::GenerateFlatFontRanges(
897892
}
898893
nsIContent* content = node->AsContent();
899894

900-
if (content->IsText()) {
901-
uint32_t startOffset = content != startNode ? 0 : aRawRange.StartOffset();
902-
uint32_t endOffset =
903-
content != endNode ? content->TextLength() : aRawRange.EndOffset();
904-
AppendFontRanges(aFontRanges, content, baseOffset, startOffset, endOffset,
905-
aLineBreakType);
906-
baseOffset +=
907-
GetTextLengthInRange(content, startOffset, endOffset, aLineBreakType);
895+
if (const Text* textNode = Text::FromNode(content)) {
896+
const uint32_t startOffset =
897+
textNode != startNode ? 0 : aRawRange.StartOffset();
898+
const uint32_t endOffset =
899+
textNode != endNode ? textNode->TextLength() : aRawRange.EndOffset();
900+
AppendFontRanges(aFontRanges, *textNode, baseOffset, startOffset,
901+
endOffset, aLineBreakType);
902+
baseOffset += GetTextLengthInRange(*textNode, startOffset, endOffset,
903+
aLineBreakType);
908904
} else if (ShouldBreakLineBefore(*content, mRootContent)) {
909905
if (aFontRanges.IsEmpty()) {
910906
MOZ_ASSERT(baseOffset == 0);

dom/events/ContentEventHandler.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ class MOZ_STACK_CLASS ContentEventHandler {
263263
uint32_t aMaxLength = UINT32_MAX);
264264
// Get the text length of a given range of a content node in
265265
// the given line break type.
266-
static uint32_t GetTextLengthInRange(nsIContent* aContent,
266+
static uint32_t GetTextLengthInRange(const dom::Text& aTextNode,
267267
uint32_t aXPStartOffset,
268268
uint32_t aXPEndOffset,
269269
LineBreakType aLineBreakType);
@@ -319,7 +319,7 @@ class MOZ_STACK_CLASS ContentEventHandler {
319319

320320
using FontRangeArray = nsTArray<mozilla::FontRange>;
321321
static void AppendFontRanges(FontRangeArray& aFontRanges,
322-
nsIContent* aContent, uint32_t aBaseOffset,
322+
const dom::Text& aTextNode, uint32_t aBaseOffset,
323323
uint32_t aXPStartOffset, uint32_t aXPEndOffset,
324324
LineBreakType aLineBreakType);
325325
nsresult GenerateFlatFontRanges(const RawRange& aRawRange,

0 commit comments

Comments
 (0)