@@ -751,26 +751,21 @@ static FontRange* AppendFontRange(nsTArray<FontRange>& aFontRanges,
751751
752752/* static */
753753uint32_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 */
765762void 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 );
0 commit comments