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

Commit 16f8694

Browse files
Bug 1734771 - part 10: Make ContentEventHandler::ExpandToClusterBoundary() take Text& instead of nsIContent* r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D128147
1 parent 411190c commit 16f8694

File tree

3 files changed

+14
-14
lines changed

3 files changed

+14
-14
lines changed

dom/events/ContentEventHandler.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -941,24 +941,22 @@ nsresult ContentEventHandler::GenerateFlatFontRanges(
941941
return NS_OK;
942942
}
943943

944-
nsresult ContentEventHandler::ExpandToClusterBoundary(nsIContent* aContent,
945-
bool aForward,
946-
uint32_t* aXPOffset) {
944+
nsresult ContentEventHandler::ExpandToClusterBoundary(
945+
Text& aTextNode, bool aForward, uint32_t* aXPOffset) const {
947946
// XXX This method assumes that the frame boundaries must be cluster
948947
// boundaries. It's false, but no problem now, maybe.
949-
if (!aContent->IsText() || *aXPOffset == 0 ||
950-
*aXPOffset == aContent->TextLength()) {
948+
if (*aXPOffset == 0 || *aXPOffset == aTextNode.TextLength()) {
951949
return NS_OK;
952950
}
953951

954-
NS_ASSERTION(*aXPOffset <= aContent->TextLength(), "offset is out of range.");
952+
NS_ASSERTION(*aXPOffset <= aTextNode.TextLength(), "offset is out of range.");
955953

956954
MOZ_DIAGNOSTIC_ASSERT(mDocument->GetPresShell());
957955
int32_t offsetInFrame;
958956
CaretAssociationHint hint =
959957
aForward ? CARET_ASSOCIATE_BEFORE : CARET_ASSOCIATE_AFTER;
960958
nsIFrame* frame = nsFrameSelection::GetFrameForNodeOffset(
961-
aContent, int32_t(*aXPOffset), hint, &offsetInFrame);
959+
&aTextNode, int32_t(*aXPOffset), hint, &offsetInFrame);
962960
if (frame) {
963961
auto [startOffset, endOffset] = frame->GetOffsets();
964962
if (*aXPOffset == static_cast<uint32_t>(startOffset) ||
@@ -986,9 +984,8 @@ nsresult ContentEventHandler::ExpandToClusterBoundary(nsIContent* aContent,
986984
}
987985

988986
// If the frame isn't available, we only can check surrogate pair...
989-
const nsTextFragment* text = &aContent->AsText()->TextFragment();
990-
NS_ENSURE_TRUE(text, NS_ERROR_FAILURE);
991-
if (text->IsLowSurrogateFollowingHighSurrogateAt(*aXPOffset)) {
987+
if (aTextNode.TextFragment().IsLowSurrogateFollowingHighSurrogateAt(
988+
*aXPOffset)) {
992989
*aXPOffset += aForward ? 1 : -1;
993990
}
994991
return NS_OK;
@@ -1061,7 +1058,7 @@ nsresult ContentEventHandler::SetRawRangeFromFlatTextOffset(
10611058

10621059
if (aExpandToClusterBoundaries) {
10631060
uint32_t oldXPOffset = xpOffset;
1064-
nsresult rv = ExpandToClusterBoundary(textNode, false, &xpOffset);
1061+
nsresult rv = ExpandToClusterBoundary(*textNode, false, &xpOffset);
10651062
if (NS_WARN_IF(NS_FAILED(rv))) {
10661063
return rv;
10671064
}
@@ -1142,7 +1139,7 @@ nsresult ContentEventHandler::SetRawRangeFromFlatTextOffset(
11421139
}
11431140
}
11441141
if (aExpandToClusterBoundaries) {
1145-
nsresult rv = ExpandToClusterBoundary(textNode, true, &xpOffset);
1142+
nsresult rv = ExpandToClusterBoundary(*textNode, true, &xpOffset);
11461143
if (NS_WARN_IF(NS_FAILED(rv))) {
11471144
return rv;
11481145
}

dom/events/ContentEventHandler.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,8 +314,10 @@ class MOZ_STACK_CLASS ContentEventHandler {
314314
nsresult ConvertToRootRelativeOffset(nsIFrame* aFrame, nsRect& aRect);
315315
// Expand aXPOffset to the nearest offset in cluster boundary. aForward is
316316
// true, it is expanded to forward.
317-
nsresult ExpandToClusterBoundary(nsIContent* aContent, bool aForward,
318-
uint32_t* aXPOffset);
317+
// FYI: Due to `nsFrameSelection::GetFrameForNodeOffset()`, this cannot
318+
// take `const dom::Text&`.
319+
nsresult ExpandToClusterBoundary(dom::Text& aTextNode, bool aForward,
320+
uint32_t* aXPOffset) const;
319321

320322
using FontRangeArray = nsTArray<mozilla::FontRange>;
321323
static void AppendFontRanges(FontRangeArray& aFontRanges,

layout/generic/nsFrameSelection.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ class nsFrameSelection final {
435435
* that frame.
436436
*
437437
* @param aNode input parameter for the node to look at
438+
* TODO: Make this `const nsIContent*` for `ContentEventHandler`.
438439
* @param aOffset offset into above node.
439440
* @param aReturnOffset will contain offset into frame.
440441
*/

0 commit comments

Comments
 (0)